2012-01-09 11 views
3

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

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

答えて

3

私はあなたの既存のDoAsyncメソッドが非同期に実行されることを想定しています。その場合

、あなたはこのようにそれをラップすることができます:私はあなたの既存のDoAsyncメソッドが非同期エラーを報告する方法を見ていない

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

。必要であれば、TaskCompletionSource<T>.TrySetExceptionを使用して非同期エラーを報告できます。

+0

ありがとう、ちょうど必要と見て、かなりいいね! – sam

関連する問題