サーバーからデータをチャンクでプルし、処理のために返すメソッドがあります。いくつかの測定を行ったところ、バックグラウンドでチャンクをダウンロードし、BlockingCollection<T>
. これにより、クライアントとサーバーは互いに待機するのではなく、同時に動作できます。
public static IEnumerable<DataRecord> GetData(String serverAddress, Int64 dataID)
{
BlockingCollection<DataRecord> records = new BlockingCollection<DataRecord>();
Task.Run(
() =>
{
Boolean isMoreData = false;
do
{
// make server request and process response
// this block can throw
records.Add(response.record);
isMoreData = response.IsMoreData;
}
while (isMoreData);
records.CompleteAdding();
});
return records.GetConsumingEnumerable();
}
呼び出し元 (C++/CLI ライブラリ) は、例外が発生したことを認識して、必要に応じて再試行または救済できるようにする必要があります。戻り値の型を最小限に変更しながら、呼び出し元に例外を伝達する最良の方法は何ですか?