c# – 当你使用async-await时,我在哪里定义Task以及我等待它的位
我正在看示例方法
public async Task MyMethodAsync() { Task<int> longRunningTask = LongRunningOperationAsync(); // independent work which doesn't need the result of LongRunningOperationAsync can be done here //and now we call await on the task int result = await longRunningTask; //use the result Console.WriteLine(result); } 从How and When to use `async` and `await`开始,我对它是如何工作有疑问. 所以,我想说我可以添加一些“独立工作”. public async Task MyMethodAsync() { Task<int> longRunningTask = LongRunningOperationAsync(); int millionthPrimeNumber = GetMillionthPrimeNumber(); int result = await longRunningTask; //use the result Console.WriteLine(result % millionthPrimeNumber); } 获得百万分之一的素数是独立的工作,所以我希望它是夹在任务< int>之间的东西. longRunningTask = LongRunningOperationAsync();和int result = await longRunningTask; 但是,我很好奇的是我是否可以写作 public async Task MyMethodAsync() { int result = await LongRunningOperationAsync(); int millionthPrimeNumber = GetMillionthPrimeNumber(); //use the result Console.WriteLine(result % millionthPrimeNumber); } 这是否相同?或者任务< int> longRunningTask = LongRunningOperationAsync();和int result = await longRunningTask;实际上作为旗帜,以便可以做的独立工作是他们之间的任何事情? 解决方法
很多人误解了这一点.
首先:await不会启动任务.调用任务返回方法启动任务. Await不会导致同步的方法神奇地变为异步. 然后做什么呢? Await意味着在此任务完成后的某个时间之后,此点之后的内容将不会运行.而已.这就是它的含义.为此,它异步等待任务完成.通过“异步等待”,我的意思是“返回呼叫者,以便在我们等待时可以完成更多工作”. 如果任务产生一个值,那么await将从已完成的任务中提取值.这是完全一致的:如果下面的代码取决于任务的值,那么它还取决于正在完成的任务! 您应该在代码中等待以下代码取决于已完成的等待任务的点.
它们是等价的,因为它们最终都会产生相同的结果.它们表达不同的异步工作流程并不等同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |