以下のコードについて、このコードをより堅牢に書き直すための推奨される方法は何ですか?
私はこれを await async についてよりよく理解しようとしています。
以下のコードで気付くと思いますが、1 つの結果を allSheets に追加するために 2 つのメソッドを待機しています。
以下のコードのパフォーマンスを向上させるにはどうすればよいですか。これらのメソッド呼び出しをすべて同時に実行する必要があり、次々と実行するのではなく、並列に並んでいるものを受け入れます。明らかに、結果を待っているメソッドを呼び出すために、最初のメソッドは結果を返さなければなりません。
async static Task<List<Bitmap>> BuildSheetsAsync(Guid userID, IElevation elevation, bool includeLabels)
{
var processedParts = await new PartsProcessor.PartProcessor().ProcessParts(userID, elevation, false);
processedParts.Elevation = elevation;
List<Bitmap> allSheets = new List<Bitmap>();
//materials list
allSheets.Add(await (await MaterialsList.Manager.GetMaterialListAsync(processedParts)).GetDrawingAsync());
//optimized parts
allSheets.Add(await (await Optimization.Manager.GetOptimizedPartsAsync(processedParts)).GetDrawingAsync());
//cut sheet
processedParts = await new PartsProcessor.PartProcessor().ProcessParts(userID, elevation, true);
processedParts.Elevation = elevation;
allSheets.Add(await CutSheet.Manager.GetCutSheet(processedParts).GetDrawingAsync());
}
追加の質問
以下のようなラベルの場合、List を返します。どうすればそれを機能させることができますか?lbls を allSheets.AddRange に追加するとエラーが発生します。
//labels
if (includeLabels)
{
var lbls = GetGetLabelsDrawingAsync(processedParts);
allSheets.AddRange(await Task.WhenAll(materialsList, optimizedParts, cutSheet, lbls));
}
else
{
allSheets.AddRange(await Task.WhenAll(materialsList, optimizedParts, cutSheet));
}
return allSheets;
}
static async Task<List<Bitmap>> GetGetLabelsDrawingAsync(ProcessedParts processedParts)
{
var list = await AlumCloudPlans.Manager.GetLabelsAsync(processedParts);
return await list.GetSheets(new SheetInfo(3, 10, 240, 90, 780, 980));
}