use*_*000 3 .net c# asynchronous async-await
我正在看示例方法
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);
}
Run Code Online (Sandbox Code Playgroud)
从How和何时使用`async`和`await`,我有一个关于它是如何工作的问题.
所以,我想说我可以添加一些"独立工作".
public async Task MyMethodAsync()
{
Task<int> longRunningTask = LongRunningOperationAsync();
int millionthPrimeNumber = GetMillionthPrimeNumber();
int result = await longRunningTask;
//use the result
Console.WriteLine(result % millionthPrimeNumber);
}
Run Code Online (Sandbox Code Playgroud)
获得百万分之一的素数是独立的工作,所以我希望它是夹在Task<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);
}
Run Code Online (Sandbox Code Playgroud)
这是否相同?抑或是Task<int> longRunningTask = LongRunningOperationAsync();和int result = await longRunningTask;实际作为标志,这样可以做独立的工作是什么,它们之间?
很多人误解了这一点.
首先:await不会启动任务.调用任务返回方法启动任务.Await不会导致同步的方法神奇地变为异步.
然后做什么呢?Await意味着在此任务完成后的某个时间之后,此点之后的内容将不会运行.而已.这就是它的含义.为此,它异步等待任务完成.通过"异步等待",我的意思是"返回呼叫者,以便在我们等待时可以完成更多工作".
如果任务产生一个值,那么await将从已完成的任务中提取值.这是完全一致的:如果下面的代码取决于任务的值,那么它还取决于正在完成的任务!
您应该在代码中等待以下代码取决于已完成的等待任务的点.
这是否相同?
它们是等价的,因为它们最终都会产生相同的结果.它们表达不同的异步工作流程并不等同.