gpt4 book ai didi

.net - 等待任务 : Return task or await if no code after await

转载 作者:行者123 更新时间:2023-12-03 12:53:40 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





At the end of an async method, should I return or await?

(2 个回答)


8年前关闭。




我做了一些阅读,并认为我已经掌握了关于 System.Threading.Task 的 await 和 async 关键字的基础知识。

但是,我不确定我是否正确解决了一个小问题,并且正在寻找验证或有人纠正我。

我正在使用这个签名实现一个异步方法:

public Task ProcessUploadedFile(FileInfo info, string contentType);

显然,如果我想在方法中等待任何东西,我需要将 async 关键字添加到签名中,

我的问题是:如果我的方法做的最后一件事是调用另一个异步方法,或者返回一个任务,那么等待它有什么意义吗?

例如。

1:
public async Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();

DoSomethingElse();

await DoMethodAsync();
}

2:
public Task ProcessUploadedFile(FileInfo info, string contentType)
{
foreach (var something in someCollection)
DoSomething();

DoSomethingElse();

return DoMethodAsync();
}

我最初写的是前者,但不再看到添加等待的意义。如果我写后者,我完成了同样的事情,如果他们选择这两种方法的调用者仍然可以使用 await 关键字,不是吗?

以上有什么不同吗?哪个更好”?

最佳答案

await用于在等待完成时继续执行方法体。如果没有什么可以继续的,那么你就不需要等待。

ContinueWith 开始,您可以考虑等待(简化)手术。所以,你的第一种方法是这样的:

foreach (var something in someCollection)
DoSomething();

DoSomethingElse();

DoMethodAsync().ContinueWith(t => {});

有一篇很好的 MSDN 文章描述了 what happens in async method它有很好的代码流程图:

enter image description here

关于.net - 等待任务 : Return task or await if no code after await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061849/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com