1

前のアクティビティ関数によって決定された入力を持つ永続的な関数があります。アクティビティ関数ごとに、各タスクが前のタスクの出力に依存する複数の待機可能なタスクがあります。

これは次のような私の構造です:

オーケストレーター

[FunctionName("MessageController")]
public static async void Run(
    [OrchestrationTrigger] DurableOrchestrationContext context,
    TraceWriter log)
{
    if (!context.IsReplaying) log.Warning("MessageController started");

    var Input1= context.CallActivityAsync<ResultMessage>("Function_1", new InputMessage());
    var Input2= context.CallActivityAsync<ResultMessage>("Function_2", Input1);
    var Input3= context.CallActivityAsync<ResultMessage>("Function_2", Input2);

}

活動機能

[FunctionName("Function_1")]
public static ResultMessage Run(
    [ActivityTrigger] DurableActivityContext activityContext,
    TraceWriter log)
{
    //Awaitable task
    var taskOutput= await DoSomething();

    //Awaitable task
    var token = await DoAnotherThing(taskOutput);
}

私はこれをテストしましたが、すべて正常に動作します。しかし、これが良い習慣かどうか疑問に思っていますか?耐久性のある関数のアクティビティ関数内に待機可能なタスクがあるのは正常ですか?

4

1 に答える 1

4

はい、まったく問題ありません。実際、妥当な時間内 (従量課金プランでは 5 分未満) で完了する限り、アクティビティ関数で好きなことを行うことができます。非同期呼び出し、スレッドの切り替え、および非決定論的な操作を行うことができます。

制約は、オーケストレーター関数にのみ適用されます。

于 2018-06-14T06:03:26.393 に答える