2 に答える
8
TaskExtensions.Unwrapを使用してチェーン全体を次のように記述できます。
Task<string> DoBoth(int value)
{
Task<Task<string>> task = DoInt(value).ContinueWith(valueTask =>
{
return DoString(valueTask.Result);
});
return task.Unwrap();
}
これは がDoInt
として定義されていることを前提としてTask<int> DoInt(int value);
おり、説明とは異なりますが、コード例に従います。
DoInt が int 引数を取らない場合 (宣言と一致)、これは次のようになります。
Task<string> DoBoth()
{
return DoInt().ContinueWith(t => DoString(t.Result)).Unwrap();
}
さらに、C# 5 と .NET 4.5 (または非同期ターゲット パック) を使用すると、次のように記述できます。
async Task<string> DoBoth(int value)
{
int first = await DoInt(value);
return await DoString(first);
}
于 2012-08-14T15:43:06.153 に答える
0
関数型言語の flatMap メソッドのようなものが必要です。http://en.wikipedia.org/wiki/Monad_%28functional_programming%29#fmap_and_join
于 2014-03-02T10:39:48.127 に答える