2

TaskCompletionSourceTask代わりにを作成するにはどうすればよいTask<TResult>ですか?

4

1 に答える 1

4

非汎用バージョンはありません。ただし、Task<T>から派生しているため、タスクをTask使用して返すだけです。TaskCompletionSource<bool>

Task SomeMethodAsync()
{
    var tcs = new TaskCompletionSource<bool>();

    // Implement method as needed

    return tcs.Task; // Return the Task<bool> as a Task
}

小さい値の型であるという理由だけで使用していることに注意してくださいbool。結果は「破棄」されます。ここでの別のオプションは、独自のカスタム型を作成してそれを返すことです。

private struct EmptyType {}

Task SomeMethodAsync()
{
    var tcs = new TaskCompletionSource<EmptyType>();

    // Implement method as needed
    // Use tcs.SetResult(default(EmptyType)) or similar

    return tcs.Task; // Return the Task<bool> as a Task
}

ここでの主な利点は、タイプが可能な限り最小であり (無駄が少なく)、結果に「値」が含まれていることを示唆しないタイプです (消費者がリフレクションを使用する場合など)。

于 2013-07-05T20:00:05.793 に答える