0

非同期操作を構成する方法を探しています。最終的な目標は、非同期操作を実行し、完了まで実行するか、ユーザー定義のタイムアウト後に戻ることです。

例として、次のコルーチンを組み合わせる方法を探しているとします1 :

IAsyncOperation<IBuffer> read(IBuffer buffer, uint32_t count)
{
    auto&& result{ co_await socket_.InputStream().ReadAsync(buffer, count, InputStreamOptions::None) };
    co_return result;
}

インスタンスでsocket_あることStreamSocket

そして、タイムアウト コルーチン:

IAsyncAction timeout()
{
    co_await 5s;
}

これらのコルーチンを組み合わせて、データが読み取られるか、タイムアウトが経過すると、できるだけ早く戻る方法を探しています。

これまでに評価したオプションは次のとおりです。

そのことから、同時実行ランタイムを使用する必要があるようです。とはいえ、すべてのパーツを揃えるのは難しい。例外を処理する方法と、それぞれの他の同時タスクのキャンセルが必要かどうかについて、特に混乱しています。

質問は 2 つあります。

  • コンカレンシー ランタイムは唯一のオプションですか (UWP アプリケーション)?
  • 実装はどのようになりますか?

1 メソッドはアプリケーションの内部にあります。Windows ランタイムと互換性のある型を返す必要はありません。

4

2 に答える 2