3

コールバック関数をパラメーターとして受け入れる既存の非同期メソッドをタスク並列ライブラリ互換メソッドにラップする方法は?

// 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)
}
4

1 に答える 1

3

DoAsync既存のメソッドが非同期で実行されると想定しています。

その場合、次のようにラップできます。

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

DoAsync既存のメソッドが非同期エラーを報告する方法がわかりません。TaskCompletionSource<T>.TrySetException必要に応じて、非同期エラーを報告するために使用できます。

于 2012-01-09T16:56:47.213 に答える