2017-03-07 9 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を削除し、void BtnPage_Clickedの隣に非同期を置くと、UIが遅くなります。 Task.Run()ドキュメントからAsync - 別のスレッドを実行するのを待っていますか?

+0

ドキュメントの「非同期で実行する作業」を参照してください。https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx – Alexander

答えて

3

はThreadPoolの上で実行するように指定された作業をキューに入れて、その仕事のためのタスクまたはTask<TResult>ハンドルを返します。

他のスレッドでタスクを実行しているのはTask.Run()です。 asyncは自動的に別のスレッドでコードを実行するのではなく、rewriting await statements/expressionsのようにメソッド内のさまざまな構造を変換するようにコンパイラに指示します。

関連する問題