gpt4 book ai didi

c# - 任务回调和 OnCompleted() 之间的区别

转载 作者:太空狗 更新时间:2023-10-30 01:04:58 26 4
gpt4 key购买 nike

当我在 C# 上玩任务时,我想知道使用 GetAwaiter().OnCompleted() 和回调有什么区别

案例 1:task1.GetAwaiter().OnCompleted()

Task task1 = new Task(() =>
{
//Do Work_1 here
});

task1.GetAwaiter().OnCompleted(() =>
{
//Do something here where Work_1 Completed
});

task1.Start();

案例 2:回调

await Task2(() =>
{
//CallBack
});
private async Task Task2(Action callBack)
{
//do Work_2 here
await Task.Run(callBack);
}

我想了解这一点,但我想我遗漏了什么。

最佳答案

在讨论差异之前,我必须指出一件事:您不应该使用这两种方法中的任何一种GetAwaiter()await 内部使用,它在某些专用代码中很有用,但您不应该在普通代码中使用它。而继续操作正是 async-await 试图避免的。

如果你想有一个延续,要么使用await,要么可能使用ContinueWith()。两者都具有可组合的优势:被调用者只需返回一个 Task ,由调用者决定如何处理它。

话虽如此,还是有一些区别:

  • 在情况 1 中,即使 Task 失败,continuation 也会运行。
  • 在情况 1 中,continuation 将在当前同步上下文(如果有)上运行。在情况 2 中,延续将始终在线程池线程上运行。

关于c# - 任务回调和 OnCompleted() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772680/

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