等待异步任务Ex
本文关键字:Ex 任务 异步 等待 | 更新日期: 2023-09-27 18:32:04
什么是TaskEx
?在 http://www.i-programmer.info/programming/c/1514-async-await-and-the-ui-problem.html?start=1 或等待 TaskEx.Delay 或等待异步澄清。我使用
Task DoWork()
{
return Task.Run(() =>
{
for (int i = 0; i < 30; i++)
{
Thread.Sleep(1000 * 60 * 30);
}
});
}
示例使用此
Task DoWork()
{
return TaskEx.Run(() =>
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(500);
}
}
});
我这样称呼它await DoWork();
如果只使用 Task
,await
不返回任何内容,也没有响应。如果我使用TaskEx
它说它在上下文中不存在。TaskEx
应该是一个类还是具有某种功能的东西?拳头一 工作,这是我的错误。
TaskEx
只是一个额外的类,最初在 .NET 4.5 发布之前随 C# 5 的 async/await 扩展的 CTP 一起提供......现在是异步目标包(也称为 Microsoft.Bcl.Async
NuGet 包)的一部分,以防你想要使用 async/await 但面向 .NET 4.0(它没有所需的一些代码)。
如果您使用的是 .NET 4.5 或更高版本,只需使用 Task.Run
,它执行相同的操作。(您不会使用定位包,因此不会有TaskEx
。异步目标包无法将静态方法添加到现有的Task
类,因此根本不需要TaskEx
存在。
"TaskEx 是一个只存在于 CTP 中的类,因为无法向框架中的现有 Task 类添加额外的方法(因为 CTP 是使用单独的程序集实现的)。
它将不存在于框架的最终RTM版本中。 在 TaskEx 上定义的方法将迁移到 Task。
源:https://social.msdn.microsoft.com/Forums/en-US/74c5ba79-76cc-4f73-a3fa-35616525ab80/what-is-the-difference-between-task-and-taskex-?forum=async
CTP 是 .NET 编译器平台的社区预览版。
这也可以通过System.Threading.Timer
来实现。如 API 文档中所述:
如果
period
为零 (0) 或超时。无限且dueTime
不是超时。无限,callback
则调用一次 [...]
因此,可以创建单次计时器,例如:
Timer oneShotTimer = new Timer((object stateInfo) => {
// your callback code here
}, null, yourOneShotTimePeriodHere, Timeout.Infinite);
API 中还有一个技巧可以从其回调方法中释放计时器:https://stackoverflow.com/a/26410217/3517056