この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

TaskCompletionSource<TResult> クラス

 

公開日: 2016年11月

デリゲートに関連付けられていない Task<TResult> のプロデューサー側を表し、Task プロパティを通じてコンシューマー側へのアクセスを提供します。

名前空間:   System.Threading.Tasks
アセンブリ:  mscorlib (mscorlib.dll 内)

System.Object
  System.Threading.Tasks.TaskCompletionSource<TResult>

[HostProtectionAttribute(SecurityAction.LinkDemand, Synchronization = true, 
	ExternalThreading = true)]
public class TaskCompletionSource<TResult>

型パラメーター

TResult

この TaskCompletionSource<TResult> に関連付けられている結果値の型。

名前説明
System_CAPS_pubmethodTaskCompletionSource<TResult>()

TaskCompletionSource<TResult> を作成します。

System_CAPS_pubmethodTaskCompletionSource<TResult>(Object)

指定された状態を使用して、TaskCompletionSource<TResult> を作成します。

System_CAPS_pubmethodTaskCompletionSource<TResult>(Object, TaskCreationOptions)

指定された状態とオプションを使用して、TaskCompletionSource<TResult> を作成します。

System_CAPS_pubmethodTaskCompletionSource<TResult>(TaskCreationOptions)

指定されたオプションを使用して、TaskCompletionSource<TResult> を作成します。

名前説明
System_CAPS_pubpropertyTask

この Task<TResult> によって作成される TaskCompletionSource<TResult> を取得します。

名前説明
System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_pubmethodSetCanceled()

基になる Task<TResult>Canceled 状態へ遷移させます。

System_CAPS_pubmethodSetException(Exception)

基になる Task<TResult>Faulted 状態に移行させ、それを指定の例外にバインドします。

System_CAPS_pubmethodSetException(IEnumerable<Exception>)

基になる Task<TResult>TaskStatus.Faulted 状態へ移行し、例外オブジェクトのコレクションをそれにバインドします。

System_CAPS_pubmethodSetResult(TResult)

基になる Task<TResult>RanToCompletion 状態へ遷移させます。

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

System_CAPS_pubmethodTrySetCanceled()

基になる Task<TResult>Canceled 状態への遷移を試みます。

System_CAPS_pubmethodTrySetCanceled(CancellationToken)

基になる Task<TResult>TaskStatus.Canceled 状態への遷移を試みるとともに、キャンセル トークンをキャンセルされたタスクに格納できるようにします。

System_CAPS_pubmethodTrySetException(Exception)

基になる Task<TResult>Faulted 状態への移行を試み、それを指定の例外にバインドします。

System_CAPS_pubmethodTrySetException(IEnumerable<Exception>)

基になる Task<TResult>Faulted 状態への移行を試み、例外オブジェクトのコレクションをそれにバインドします。

System_CAPS_pubmethodTrySetResult(TResult)

基になる Task<TResult>RanToCompletion 状態への遷移を試みます。

多くのシナリオで有効にすると便利です、 Task<TResult> を外部の非同期操作を表します。 TaskCompletionSource<TResult> この目的で提供されます。 コンシューマーに渡すことができるタスクを作成でき、その他の場合と、それらのコンシューマーは、タスクのメンバーを使用しています。 ただし、ほとんどのタスクとは異なり、TaskCompletionSource によって作成されたタスクの状態が明示的にによって制御 TaskCompletionSource のメソッドです。 これにより、基になるタスクに反映されるまで外部の非同期操作を完了できます。 分離は、コンシューマーが対応する TaskCompletionSource へのアクセスなしの状態を変更することができないことも確認します。 詳細については、エントリを参照してください。 The Nature of TaskCompletionSource<TResult> .NET ブログでの並列プログラミングにします。

Parallel Extensions samples もを使用する方法の例を含む TaskCompletionSource<TResult>します。

次の例では、使用する方法、 TaskCompletionSource<TResult>:

using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;

class TCSDemo
{
    // Demonstrated features:
    // 		TaskCompletionSource ctor()
    // 		TaskCompletionSource.SetResult()
    // 		TaskCompletionSource.SetException()
    //		Task.Result
    // Expected results:
    // 		The attempt to get t1.Result blocks for ~1000ms until tcs1 gets signaled. 15 is printed out.
    // 		The attempt to get t2.Result blocks for ~1000ms until tcs2 gets signaled. An exception is printed out.
    static void Main()
    {
        TaskCompletionSource<int> tcs1 = new TaskCompletionSource<int>();
        Task<int> t1 = tcs1.Task;

        // Start a background task that will complete tcs1.Task
        Task.Factory.StartNew(() =>
        {
            Thread.Sleep(1000);
            tcs1.SetResult(15);
        });

        // The attempt to get the result of t1 blocks the current thread until the completion source gets signaled.
        // It should be a wait of ~1000 ms.
        Stopwatch sw = Stopwatch.StartNew();
        int result = t1.Result;
        sw.Stop();

        Console.WriteLine("(ElapsedTime={0}): t1.Result={1} (expected 15) ", sw.ElapsedMilliseconds, result);

        // ------------------------------------------------------------------

        // Alternatively, an exception can be manually set on a TaskCompletionSource.Task
        TaskCompletionSource<int> tcs2 = new TaskCompletionSource<int>();
        Task<int> t2 = tcs2.Task;

        // Start a background Task that will complete tcs2.Task with an exception
        Task.Factory.StartNew(() =>
        {
            Thread.Sleep(1000);
            tcs2.SetException(new InvalidOperationException("SIMULATED EXCEPTION"));
        });

        // The attempt to get the result of t2 blocks the current thread until the completion source gets signaled with either a result or an exception.
        // In either case it should be a wait of ~1000 ms.
        sw = Stopwatch.StartNew();
        try
        {
            result = t2.Result;

            Console.WriteLine("t2.Result succeeded. THIS WAS NOT EXPECTED.");
        }
        catch (AggregateException e)
        {
            Console.Write("(ElapsedTime={0}): ", sw.ElapsedMilliseconds);
            Console.WriteLine("The following exceptions have been thrown by t2.Result: (THIS WAS EXPECTED)");
            for (int j = 0; j < e.InnerExceptions.Count; j++)
            {
                Console.WriteLine("\n-------------------------------------------------\n{0}", e.InnerExceptions[j].ToString());
            }
        }
    }

}

ユニバーサル Windows プラットフォーム
8 以降で使用可能
.NET Framework
4.0 以降で使用可能
ポータブル クラス ライブラリ
サポート対象: 移植可能 .NET プラットフォーム
Silverlight
5.0 以降で使用可能
Windows Phone Silverlight
8.0 以降で使用可能
Windows Phone
8.1 以降で使用可能

すべてのメンバー TaskCompletionSource<TResult> はスレッド セーフであると同時に複数のスレッドから使用できます。

トップに戻る
表示: