dar*_*ect 19 .net task-parallel-library async-await
我已经做了一些阅读,并且认为我已经掌握了await和async关键字的基础知识,关于System.Threading.Task.
但是,我不确定我是否对一个小问题是正确的,我正在寻找验证或有人纠正我.
我正在使用此签名实现异步方法:
public Task ProcessUploadedFile(FileInfo info, string contentType);
Run Code Online (Sandbox Code Playgroud)
显然,如果我想等待方法内的任何内容,我需要在签名中添加async关键字,
我的问题是这样的:如果我的方法做的最后一件事是调用另一个异步方法,或者返回一个任务,那么等待它有什么意义吗?
例如.
1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
await DoMethodAsync();
}
Run Code Online (Sandbox Code Playgroud)
2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
return DoMethodAsync();
}
Run Code Online (Sandbox Code Playgroud)
我最初写的是前者,但是不能再看到添加等待的重点了.如果我要编写后者,我会完成同样的事情,两个方法的调用者仍然可以使用await关键字,如果他们选择,不是吗?
上面有什么不同吗?哪个更好"?
Ser*_*kiy 17
await用于在等待完成时继续执行方法体.如果没有什么可以继续,那么你不需要等待.
你可以想到等待(简化)ContinueWith操作.所以,你的第一种方法是这样的:
foreach (var something in someCollection)
DoSomething();
DoSomethingElse();
DoMethodAsync().ContinueWith(t => {});
Run Code Online (Sandbox Code Playgroud)
有一篇很好的MSDN文章描述了async方法中发生了什么,它有很好的代码流图:

| 归档时间: |
|
| 查看次数: |
6143 次 |
| 最近记录: |