2 回答

TA贡献1998条经验 获得超6个赞
我希望list = await interesting.GenerateListAsync();在运行时异步alsoList = interesting.GenerateList();运行,
这种期望是不正确的;的全部要点是在异步操作完成之前await,它不会继续超过该点;它通过一系列技巧来做到这一点,包括异步状态机,允许在结果返回时恢复未完成的操作。但是,您可以只移动您所在的点await,这样就不会导致这种感知阻塞:
List<int> list;
List<int> alsoList;
var pending = interesting.GenerateListAsync(); // no await
alsoList = interesting.GenerateList();
list = await pending; // essentially "joins" at this point... kind of
请注意,async并行性是不同的东西;它们可以一起使用,但默认情况下不会发生这种情况。另请注意:并非所有代码都设计为允许并发使用,因此您不应该在不知道是否可以在特定 API 上使用并发调用的情况下做这种事情。

TA贡献2021条经验 获得超8个赞
关于答案,请查看await(C# 参考)
await运算符应用于异步方法中的任务,以在该方法的执行中插入一个挂起点,直到等待的任务完成。这就是您的应用程序运行 GenerateListAsync 然后再运行 GenerateList 的原因。要异步运行 GenerateListAsync,您需要在 Task 变量中获取 GenerateListAsync 返回值,然后调用 GenerateList,然后使用等待 GenerateListAsync 方法。
例如
Task <List<int>> longRunningTask = interesting.GenerateListAsync(); alsoList = interesting.GenerateList(); list = await longRunningTask;
- 2 回答
- 0 关注
- 74 浏览
添加回答
举报