作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当我在 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
,由调用者决定如何处理它。
话虽如此,还是有一些区别:
Task
失败,continuation 也会运行。关于c# - 任务回调和 OnCompleted() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20772680/
我参加了一些类(class)并阅读了 YAGNI 的用途。但是,作为一个整体,这个原则从来没有让我满意。它引入了一个逻辑悖论。 作为一个假设,您正在设计一个打算向前扩展的框架。 YAGNI(可能还有
我是一名优秀的程序员,十分优秀!