非同期待機パターンについて質問があります。次のコードがあります
internal async Task<int> ConsumedBytesAsync(byte[] buffer)
{
while(condition)
{
//build message
if (message != null)
{
if (_previousRegisterMessageTask != null)
{
await _previousRegisterMessageTask;
}
_previousRegisterMessageTask = _controllers.RegisterMessageAsync(message, chunk.MessageHeader.MessageStreamId);
}
}
return totalConsumed;
}
そして、他のクラスのコード。
internal async Task RegisterMessageAsync(IMessage message, uint messageid)
{
// some stuff about retrieve resposible controller
if (controller != null)
{
await controller.HandleMessage(message, action);
}
}
RegisterMessage を非同期で実行し、同時に次のメッセージのビルドを開始することで、パフォーマンスを向上させたいと考えています。次のメッセージが作成されると、プロセスは前のメッセージの登録が完了するまで待機する必要があります。理想的な世界では正常に動作するはずですが、実際には _controllers.RegisterMessageAsync メソッドは同期的に実行されます。
ストップウォッチでそのメソッドの開始と停止を確認しました(実行する必要がある操作はタスクの戻りと保存だけであるため、経過時間は約0〜5であると想定しましたが、800〜900でしたこれの平均実行時間は何ですかメソッド) と _controllers.RegisterMessageAsync 内の Control.WriteLine を待機後、_previousRegisterMessageTask にタスクを保存した後 (_controllers.RegisterMessageAsync からの Control.WriteLine が最初に表示されます)。
そのため、その操作が非同期ではなく同期で機能する理由と、上記で説明したロジックを実現するために何ができるかを教えてください。多分私は間違ったテストをしましたが、それは非同期で動作しますか? 前もって感謝します。