正确调用无效的任务的方法

时间:2013-06-06 17:25:24

标签: c# async-await class-library

我想检查以确保在方法只返回Task而不是Task<T>时调用返回void的方法。

我有一个帮助方法,它的签名看起来像这样:

internal async static Task DrawLeafMidrail(Graphics dc, float totalHeightFeet,    List<HorizontalContainer> horizontals, bool showDetails, bool showVerticalDetails)
        {
            await Task.Run(() =>
            {
                float y, sl, startX, endX, stileWidth = 0, btmRailPx = 0, leftJmb;
                PointF[] points;
                List<VerticalContainer> verticals = new List<VerticalContainer>();
                List<LineContainer> lines = new List<LineContainer>();

                //..code omitted
            });
        }

我正在调用Task的帮助方法,如:

Horizontal.DrawLeafMidrail(
                           dc, doorPoints.BayRect.Height / Constants.PIXELS_PER_FOOT,
                           lstHors, ,forDoorDetail).Wait();    

请注意,我已将.Wait()附加到调用方的末尾。我只是想确保这是正确的方法,这将具有与调用者调用辅助方法相同的效果:

Task t = Horizontal.DrawLeafMidrail(dc, doorPoints.BayRect.Height / Constants.PIXELS_PER_FOOT, lstHors, i == 0, forDoorDetail);
t.Wait();

1 个答案:

答案 0 :(得分:2)

  

我想检查以确保在方法只返回Task而不是Task时调用返回void的方法。

这部分问题没有意义。

  

我只是想确保这是正确的方法,这将产生同样的效果

会有同样的效果吗?是。 Task不会更改表达式评估,运算符优先级或局部变量的行为方式。

这是对的吗?不,您应该使用await。否则,您could deadlock,正如我在MSDN文章中解释的那样。