2017-03-07 30 views
-2
void BtnPage_Clicked(object sender, EventArgs e) 
    { 
     Task.Run(async() => 
     { 
      var file = await Plugin.FilePicker.CrossFilePicker.Current.PickFile(); 
      var documentPath = await BaseProvider.CacheDocumentAsync(file.FileName, file.DataArray); 
      await documentController.NewDocumentAsync(documentPath); 

      var page1 = documentController.Pages[0]; 
      var environment = new Library.Environment(); 
      environment.SetVisibleWidth((int)skCanvas.Canvas.Width); 
      environment.SetVisibleHeight((int)skCanvas.Canvas.Height); 
      environment.SetActualWidth((int)page1.ActualWidth); 
      environment.SetActualHeight((int)page1.ActualHeight); 
      skCanvas.Environment = environment; 
      ShowPage(page1); 
     }); 
    } 

上述代码运行时不会减慢UI。如果我删除Task.Run并将无效BtnPage_Clicked旁边的异步,用户界面变得缓慢。异步 - 等待运行单独的线程?

+0

在文档中是正确的:“异步执行的工作”https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx – Alexander

回答

3

Task.Run()文档:

队列指定的工作对线程池运行和返回任务或Task<TResult>手柄的工作。

它是Task.Run()在另一个线程上执行任务。 async不会自动使代码在另一个线程上运行,而是指示编译器转换方法内部的各种结构,例如rewriting await statements/expressions