.net - 将现有异步方法包装成 TPL 兼容方法

标签 .net asynchronous task-parallel-library async-ctp

如何将接受回调函数作为参数的现有异步方法包装到任务并行库兼容方法中?

// Existing method
void DoAsync(Action<string> callback) {
    ...
}

// The desired method should have similar prototype
Task<string> DoAsync() {
    // Internally this method should call existing
    // version of DoAsync method (see above)
}

最佳答案

我假设您现有的 DoAsync方法将异步运行。

在那种情况下,你可以这样包装它:

Task<string> DoAsyncTask()
{
  var tcs = new TaskCompletionSource<string>();
  DoAsync(result => tcs.TrySetResult(result));
  return tcs.Task;
}

我不明白你现有的 DoAsync方法报告异步错误。您可以使用 TaskCompletionSource<T>.TrySetException必要时报告异步错误。

关于.net - 将现有异步方法包装成 TPL 兼容方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8791956/

相关文章:

c# - Windows 的优雅编程关闭

c# - 如何在 UML 中表示 C# 属性?

c# - 在 C# 中动态覆盖任何方法

c# - 如何访问另一个程序集的 .resx?

asynchronous - RuSTLazy_static 和 tokio::sync::mpsc::tokio::select 中的 channel

javascript - Vue/Vuex - 模块二依赖模块一,模块一从服务器获取数据

javascript - 被拖拽的物体逃跑

c# - 重 I/O 操作中的 Parallel.ForEach 与异步 For 循环

c# - C# 如何取消任务

c# - 传入一个已经取消的 CancellationToken 导致 HttpClient 挂起