[英]Inside a loop,does each async call get chained to the returned task using task's continuewith?
[英]How to call async task by using .ContinueWith
我正在幾個位圖中構建一個位圖。 我正在做的是調用多個返回Task的方法。
我遇到的問題是死鎖,因為我正試圖通過.Result從.ContinueWith()中的異步方法中檢索值,但此方法不起作用,因為它將把異步方法轉換為int同步方法,這導致我陷入僵局。
我的問題是如何在.ContinueWith中調用異步方法,或者實現這種方法的正確方法是什么?
我需要刪除.Result並正確調用異步方法Task。 正確的方法是什么?
這是我的代碼。
public async static Task<Bitmap> RollUpDrawingsImage(IElevation elevation)
{
int height = 0, width = 800;
Bitmap completeDrawings = null;
using (Bitmap elevationDoor = await ShopDrawing.Merger.MergeElevationAndDoor(elevation, RotateFlipType.Rotate90FlipNone))
{
using (Bitmap partsList = await MaterialsList.Manager.GetMaterialList(elevation).ContinueWith(async (ml) => await ml.Result.GetDrawing()).Result)
{
using (Bitmap optimized = await Optimization.Manager.GetOptimizedParts(elevation).ContinueWith(async (op) => await op.Result.GetDrawing()).Result)
{
using (Bitmap cutSheet = await CutSheet.Manager.GetCutSheet(elevation).ContinueWith(async (cs) => await cs.Result.GetDrawing()).Result)
{
height = (elevationDoor.Height + optimized.Height + cutSheet.Height + partsList.Height);
completeDrawings = new Bitmap(width, height + 40);
using (var dc = Graphics.FromImage(completeDrawings))
{
dc.DrawImageUnscaled(elevationDoor, 0, 0);
dc.DrawImageUnscaled(partsList, 0, elevationDoor.Height + 10);
dc.DrawImageUnscaled(optimized, 0, (elevationDoor.Height + partsList.Height) + 20);
dc.DrawImageUnscaled(cutSheet, 0, (elevationDoor.Height + partsList.Height + optimized.Height) + 30);
};
return completeDrawings;
}
}
}
};
}
是什么讓您認為您需要ContinueWith
?
正在await
Result
的適當替換。 附帶說明一下,您應該以“異步”結束async
方法:
public async static Task<Bitmap> RollUpDrawingsImage(IElevation elevation)
{
int height = 0, width = 800;
Bitmap completeDrawings = null;
using (Bitmap elevationDoor = await ShopDrawing.Merger.MergeElevationAndDoorAsync(elevation, RotateFlipType.Rotate90FlipNone))
using (Bitmap partsList = await (await MaterialsList.Manager.GetMaterialListAsync(elevation)).GetDrawingAsync())
using (Bitmap optimized = await (await Optimization.Manager.GetOptimizedPartsAsync(elevation)).GetDrawingAsync())
using (Bitmap cutSheet = await (await CutSheet.Manager.GetCutSheetAsync(elevation)).GetDrawingAsync())
{
height = (elevationDoor.Height + optimized.Height + cutSheet.Height + partsList.Height);
completeDrawings = new Bitmap(width, height + 40);
using (var dc = Graphics.FromImage(completeDrawings))
{
dc.DrawImageUnscaled(elevationDoor, 0, 0);
dc.DrawImageUnscaled(partsList, 0, elevationDoor.Height + 10);
dc.DrawImageUnscaled(optimized, 0, (elevationDoor.Height + partsList.Height) + 20);
dc.DrawImageUnscaled(cutSheet, 0, (elevationDoor.Height + partsList.Height + optimized.Height) + 30);
}
return completeDrawings;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.