2017-03-07 2 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); 
     }); 
    } 

Der obige Code wird ohne Verlangsamung der Benutzeroberfläche ausgeführt. Wenn ich die Task.Run entferne und Async neben void BtnPage_Clicked platziere, wird die Benutzeroberfläche langsam.Ist Async - Warten Sie einen separaten Thread?

+0

Es ist richtig in der Dokumentation: "Die Arbeit zur asynchronen Ausführung" https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx – Alexander

Antwort

3

Von der Task.Run() Dokumentation:

Queues der angegebene Arbeit auf dem Threadpool laufen und gibt eine Aufgabe oder Task<TResult> Griff für diese Arbeit.

Es ist Task.Run() Ausführen der Aufgabe auf einem anderen Thread. async führt nicht automatisch dazu, dass Code in einem anderen Thread ausgeführt wird, sondern weist den Compiler an, verschiedene Strukturen innerhalb der Methode zu transformieren, z. B. rewriting await statements/expressions.