次の方法で共有


WorkflowInvoker.InvokeAsync メソッド

定義

イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。

オーバーロード

InvokeAsync(TimeSpan, Object)

指定タイムアウト時間および一意の識別子を使用して、ワークフローを非同期的に呼び出します。

InvokeAsync(IDictionary<String,Object>, TimeSpan)

入力パラメーターの指定された IDictionary<TKey,TValue>、および指定されたタイムアウト時間を使用して、1 つのワークフローを非同期的に呼び出します。

InvokeAsync(IDictionary<String,Object>, Object)

入力パラメーターの指定された IDictionary<TKey,TValue> および一意の識別子を使用して、1 つのワークフローを非同期的に呼び出します。

InvokeAsync()

ワークフローを非同期的に呼び出します。

InvokeAsync(Object)

指定された一意の識別子を使用してワークフローを非同期的に呼び出します。

InvokeAsync(IDictionary<String,Object>)

入力パラメーターの指定された IDictionary<TKey,TValue> を使用して、1 つのワークフローを非同期的に呼び出します。

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

入力パラメーターの指定された IDictionary<TKey,TValue>、指定されたタイムアウト時間、および一意の識別子を使用して、1 つのワークフローを非同期的に呼び出します。

InvokeAsync(TimeSpan)

指定タイムアウト時間を使用して、ワークフローを非同期的に呼び出します。

注釈

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 ワークフローを完了しなければならないタイムアウト時間を構成するには、InvokeAsync を受け取る TimeSpan オーバーロードのいずれかを使用します。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

InvokeAsync(TimeSpan, Object)

指定タイムアウト時間および一意の識別子を使用して、ワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (TimeSpan timeout, object userState);
member this.InvokeAsync : TimeSpan * obj -> unit
Public Sub InvokeAsync (timeout As TimeSpan, userState As Object)

パラメーター

timeout
TimeSpan

ワークフローが完了する必要がある期間。これを超えると、中止されて TimeoutException がスローされます。

userState
Object

この特定の非同期呼び出し操作を他の現在の非同期呼び出し操作と区別するために使用されるユーザー指定のオブジェクト。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

userState パラメーターは、現在のアクティビティに関して現在実行中の InvokeAsync 操作すべてにおいて一意である必要があります。 userState が一意でない場合には、ArgumentException がスローされます。 userState は、InvokeCompleted におけるワークフローを識別するために使用されます。さらに、CancelAsync を使用してワークフローを取り消すためにも使用されます。

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 指定されたタイムアウト期間内にワークフローが完了しない場合は中止されて TimeoutException がスローされます。

注意

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

適用対象

InvokeAsync(IDictionary<String,Object>, TimeSpan)

入力パラメーターの指定された IDictionary<TKey,TValue>、および指定されたタイムアウト時間を使用して、1 つのワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan)

パラメーター

inputs
IDictionary<String,Object>

ワークフローに渡す入力パラメーターのディクショナリであり、引数名によってキー指定されます。

timeout
TimeSpan

ワークフローが完了する必要がある期間。これを超えると、中止されて TimeoutException がスローされます。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 指定されたタイムアウト期間内にワークフローが完了しない場合は中止されて TimeoutException がスローされます。

注意

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

このメソッドは、メソッドの同期的な例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクの待機時にスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Invoke(IDictionary<String,Object>, TimeSpan)スローされる例外に関するページを参照してください。

適用対象

InvokeAsync(IDictionary<String,Object>, Object)

入力パラメーターの指定された IDictionary<TKey,TValue> および一意の識別子を使用して、1 つのワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), userState As Object)

パラメーター

inputs
IDictionary<String,Object>

ワークフローに渡す入力パラメーターのディクショナリであり、引数名によってキー指定されます。

userState
Object

この特定の非同期呼び出し操作を他の現在の非同期呼び出し操作と区別するために使用されるユーザー指定のオブジェクト。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

userState パラメーターは、現在のアクティビティに関して現在実行中の InvokeAsync 操作すべてにおいて一意である必要があります。 userState が一意でない場合には、ArgumentException がスローされます。 userState は、InvokeCompleted におけるワークフローを識別するために使用されます。さらに、CancelAsync を使用してワークフローを取り消すためにも使用されます。

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 ワークフローを完了しなければならないタイムアウト時間を構成するには、InvokeAsync を受け取る TimeSpan オーバーロードのいずれかを使用します。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

適用対象

InvokeAsync()

ワークフローを非同期的に呼び出します。

public:
 void InvokeAsync();
public void InvokeAsync ();
member this.InvokeAsync : unit -> unit
Public Sub InvokeAsync ()

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 ワークフローを完了しなければならないタイムアウト時間を構成するには、InvokeAsync を受け取る TimeSpan オーバーロードのいずれかを使用します。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

このメソッドは、メソッドの同期的な例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクの待機時にスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Invoke()スローされる例外に関するページを参照してください。

適用対象

InvokeAsync(Object)

指定された一意の識別子を使用してワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(System::Object ^ userState);
public void InvokeAsync (object userState);
member this.InvokeAsync : obj -> unit
Public Sub InvokeAsync (userState As Object)

パラメーター

userState
Object

この特定の非同期呼び出し操作を他の現在の非同期呼び出し操作と区別するために使用されるユーザー指定のオブジェクト。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

userState パラメーターは、現在のアクティビティに関して現在実行中の InvokeAsync 操作すべてにおいて一意である必要があります。 userState パラメーターが一意でない場合、ArgumentException がスローされます。 userState は、InvokeCompleted におけるワークフローを識別するために使用されます。さらに、CancelAsync を使用してワークフローを取り消すためにも使用されます。

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 ワークフローを完了しなければならないタイムアウト時間を構成するには、InvokeAsync を受け取る TimeSpan オーバーロードのいずれかを使用します。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

適用対象

InvokeAsync(IDictionary<String,Object>)

入力パラメーターの指定された IDictionary<TKey,TValue> を使用して、1 つのワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object))

パラメーター

inputs
IDictionary<String,Object>

ワークフローに渡す入力パラメーターのディクショナリであり、引数名によってキー指定されます。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 ワークフローを完了しなければならないタイムアウト時間を構成するには、InvokeAsync を受け取る TimeSpan オーバーロードのいずれかを使用します。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

このメソッドは、メソッドの同期的な例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクの待機時にスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Invoke(IDictionary<String,Object>)スローされる例外に関するページを参照してください。

適用対象

InvokeAsync(IDictionary<String,Object>, TimeSpan, Object)

入力パラメーターの指定された IDictionary<TKey,TValue>、指定されたタイムアウト時間、および一意の識別子を使用して、1 つのワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(System::Collections::Generic::IDictionary<System::String ^, System::Object ^> ^ inputs, TimeSpan timeout, System::Object ^ userState);
public void InvokeAsync (System.Collections.Generic.IDictionary<string,object> inputs, TimeSpan timeout, object userState);
member this.InvokeAsync : System.Collections.Generic.IDictionary<string, obj> * TimeSpan * obj -> unit
Public Sub InvokeAsync (inputs As IDictionary(Of String, Object), timeout As TimeSpan, userState As Object)

パラメーター

inputs
IDictionary<String,Object>

ワークフローに渡す入力パラメーターのディクショナリであり、引数名によってキー指定されます。

timeout
TimeSpan

ワークフローが完了する必要がある期間。これを超えると、中止されて TimeoutException がスローされます。

userState
Object

この特定の非同期呼び出し操作を他の現在の非同期呼び出し操作と区別するために使用されるユーザー指定のオブジェクト。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

userState パラメーターは、現在のアクティビティに関して現在実行中の InvokeAsync 操作すべてにおいて一意である必要があります。 userState が一意でない場合には、ArgumentException がスローされます。 userState は、InvokeCompleted におけるワークフローを識別するために使用されます。さらに、CancelAsync を使用してワークフローを取り消すためにも使用されます。

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 指定されたタイムアウト期間内にワークフローが完了しない場合は中止されて TimeoutException がスローされます。

注意

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

適用対象

InvokeAsync(TimeSpan)

指定タイムアウト時間を使用して、ワークフローを非同期的に呼び出します。

public:
 void InvokeAsync(TimeSpan timeout);
public void InvokeAsync (TimeSpan timeout);
member this.InvokeAsync : TimeSpan -> unit
Public Sub InvokeAsync (timeout As TimeSpan)

パラメーター

timeout
TimeSpan

ワークフローが完了する必要がある期間。これを超えると、中止されて TimeoutException がスローされます。

次の例は、LongRunningDiceRoll アクティビティで構成されるワークフローを呼び出します。 LongRunningDiceRoll アクティビティには、サイコロ振り操作の結果を表す 2 つの出力引数があります。 ワークフローが完了すると、これらの値が InvokeCompleted ハンドラーで取得されます。

public sealed class LongRunningDiceRoll : Activity
{
    public OutArgument<int> D1 { get; set; }
    public OutArgument<int> D2 { get; set; }

    public LongRunningDiceRoll()
    {
        this.Implementation = () => new Sequence
        {
            Activities =
            {
                new WriteLine
                {
                    Text = "Rolling the dice for 5 seconds."
                },
                new Delay
                {
                    Duration = TimeSpan.FromSeconds(5)
                },
                new DiceRoll
                {
                    D1 = new OutArgument<int>(env => this.D1.Get(env)),
                    D2 = new OutArgument<int>(env => this.D2.Get(env))
                }
            }
        };
    }
}
AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowInvoker invoker = new WorkflowInvoker(new LongRunningDiceRoll());

invoker.InvokeCompleted += delegate(object sender, InvokeCompletedEventArgs args)
{
    if (args.Cancelled == true)
    {
        Console.WriteLine("Workflow was cancelled.");
    }
    else if (args.Error != null)
    {
        Console.WriteLine("Exception: {0}\n{1}",
            args.Error.GetType().FullName,
            args.Error.Message);
    }
    else
    {
        Console.WriteLine("The two dice are {0} and {1}.",
            args.Outputs["D1"], args.Outputs["D2"]);
    }

    syncEvent.Set();
};

invoker.InvokeAsync("InvokeAsync Example");

Console.WriteLine("Waiting for the workflow to complete.");

// Wait for the workflow to complete.
syncEvent.WaitOne();

Console.WriteLine("The workflow is complete.");

注釈

ワークフローが完了したら通知されるようにするには、InvokeCompleted を処理します。 指定されたタイムアウト期間内にワークフローが完了しない場合は中止されて TimeoutException がスローされます。

注意

TimeoutException がスローされるのは、タイムアウト期間が経過してワークフローが実行中にアイドル状態になった場合だけです。 指定されたタイムアウト時間内には完了しないワークフローが正常に完了するのは、アイドル状態にならない場合です。

このメソッドは、イベントベースの非同期デザイン パターンを使用して、1 つのワークフローを非同期的に呼び出します。 詳細については、「イベント ベースの非同期パターンの概要」を参照してください。

このメソッドは、メソッドの同期例外がスローできる非使用例外をすべて返すタスクに格納します。 返されたタスクに例外が格納されている場合、その例外はタスクが待機されたときにスローされます。 などの ArgumentException使用例外は、引き続き同期的にスローされます。 格納されている例外については、 によって Invoke(TimeSpan)スローされる例外に関するページを参照してください。

適用対象