如何从已经异步的代码创建任务?
How to create a Task from already asynchronous code?
我有一些已经异步的代码 - 只是没有使用任务系统。如果可能的话,我想让它成为一个轻量级的任务,这样代码就可以将它作为一个任务来利用。
所以我想拍这个:
void BeginThing(Action callback);
并把它变成这个伪代码:
Task MyBeginThing() {
Task retval = // what do I do here?
BeginThing(() => retval.Done())
return retval;
}
这可能吗?我不想使用互斥锁和另一个线程作为解决方案。
Task MyBeginThing() {
var taskSource = new TaskCompletionSource<object>();
BeginThing(() => taskSource.SetResult(null));
return taskSource.Task;
}
这对于调整使用事件来表示异步完成的 API 来说也很常见。如果是老派 Begin/End 异步对(也称为异步编程模型或 APM)TaskFactory.FromAsync
也很有用。
我有一些已经异步的代码 - 只是没有使用任务系统。如果可能的话,我想让它成为一个轻量级的任务,这样代码就可以将它作为一个任务来利用。
所以我想拍这个:
void BeginThing(Action callback);
并把它变成这个伪代码:
Task MyBeginThing() {
Task retval = // what do I do here?
BeginThing(() => retval.Done())
return retval;
}
这可能吗?我不想使用互斥锁和另一个线程作为解决方案。
Task MyBeginThing() {
var taskSource = new TaskCompletionSource<object>();
BeginThing(() => taskSource.SetResult(null));
return taskSource.Task;
}
这对于调整使用事件来表示异步完成的 API 来说也很常见。如果是老派 Begin/End 异步对(也称为异步编程模型或 APM)TaskFactory.FromAsync
也很有用。