如何使用await关键字获取Task的数据?

Dev*_*per 1 c# task-parallel-library async-await c#-5.0 .net-4.5

我只需要在主代码中获取FlowDocument ...

我喜欢这个,但没有成功

this.flowDoc = engine.CreateFlowDocument(contentItems); // Can't compile
 public async Task<FlowDocument> CreateFlowDocument(ContentItems contentItems)
 {   return await Task.Run(() =>
     {
         try
         {
             var fd = new FlowDocument();
             foreach (var item in contentItems.Items)
             {
                 if (item.ContentType == ContentTypes.Header)
                 {
                     var paraHeader = new Paragraph();  
                     paraHeader.FontSize = 14;
                     paraHeader.Foreground = Brushes.Black;
                     paraHeader.FontWeight = FontWeights.Bold;
                     paraHeader.Inlines.Add(new Run(item.Data));
                     fd.Blocks.Add(paraHeader);
                 }
                 if (item.ContentType == ContentTypes.Paragraph)
                 {
                      var paragraph = new Paragraph();
                      paragraph.FontSize = 12;
                      paragraph.Foreground = Brushes.Black;
                      paragraph.FontWeight = FontWeights.Normal;
                      paragraph.Inlines.Add(new Run(item.Data));
                      fd.Blocks.Add(paragraph);
                 }
             }                     
             return fd;
          }
          catch (Exception)     {                        }
          return new FlowDocument();
      }
                                 );
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

您需要等待您返回的任务CreateFlowDocument:

 this.flowDoc = await engine.CreateFlowDocument(contentItems);
Run Code Online (Sandbox Code Playgroud)

当然,这意味着代码也必须在一个异步函数.

如果你不希望它是异步方法,你可以使用该Result属性,但请注意这样做 - 这是一个阻塞调用,你可以很容易地陷入僵局.

或者你可以附上一个延续Task.ContinueWith.