2017-11-02 4 views

答えて

3

Proto.Actorで非同期アクションを処理するには、2つの方法があります。 最初は、awaitのように、Proto.Actorは非同期待機を完全サポートしています。 しかし、あなたが知っているように、これは俳優が待っている間に他のメッセージを処理するのを防ぐでしょう。

PipeToと同様のもう1つの方法は、ReenterAfterです。 これはPipeToと同じように行いますが、メッセージを送信するのではなく、コールバックをトリガしません:それは、メッセージを送信し、別のメッセージハンドラを追加するように強制するよう

public Task ReceiveAsync(IContext context) 
{ 
    var task = GetSomeAsyncTask(...); 
    context.ReenterAfter(task, t => { 
     //code inside here will run when the task completes. 
     //still preserving actor concurrency constraints 
    }); 
} 

これは、多くの場合、PipeToよりについて推論するコードが容易になります。 ReenterAfterを使用すると、同じ効果が得られますが、アクターによって制約された並行性は得られますが、このようにワークフロー全体を構築できます。

関連する問題