当我在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: CallBack
await Task2(() =>
{
//CallBack
});
private async Task Task2(Action callBack)
{
//do Work_2 here
await Task.Run(callBack);
}
我想理解这一点,我想我错过了什么。
答案 0 :(得分:5)
在讨论差异之前,我必须指出一件事:你不应该使用这两种方法中的任何一种。 GetAwaiter()
在内部使用await
,它在某些专门的代码中很有用,但您不应在普通代码中使用它。持续行动正是async
- await
试图避免的行为。
如果您想要续,请使用await
或ContinueWith()
。两者都具有可组合的优点:被调用者只返回Task
,然后调用者决定用它来做什么。
话虽如此,但存在一些差异:
Task
失败,也会继续运行。