クラス名・変数名に迷ったら書き込むスレ。Part23
■ このスレッドは過去ログ倉庫に格納されています
0883デフォルトの名無しさん
2013/11/29(金) 23:59:02.27内容としては、taskの正常終了時のみ completionFunc をかまして結果を作成、それ以外は taskの状態を引き継いだ新しいTaskを返す
public static Task<TOut> WrapPipeline<TIn, TOut>(this Task<TIn> task, Func<TIn, TOut> completionFunc)
{
var tcs = new TaskCompletionSource<TOut>();
switch( task.Status ){
case TaskStatus.Canceled:
tcs.TrySetCanceled(); break;
case TaskStatus.Faulted:
tcs.TrySetException(task.Exception.InnerExceptions); break;
case TaskStatus.RanToCompletion:
TOut result;
try{
result = completionFunc(task.Result);
} catch(Exception ex){
tcs.TrySetException(ex); break;
}
tcs.TrySetResult(result); break;
}
return tcs.Task;
}
■ このスレッドは過去ログ倉庫に格納されています