Ich benutze MvvmCross und die AsyncEx Bibliothek innerhalb einer Windows 10 (UWP) App.C# blockierender Code in async Methode
In einem Ansichtsmodell, ich habe eine INotifyTaskCompletion Eigenschaft (1), die zu einer Async-Methode in dem Ansichtsmodell (2) verkabelt-up ist
In (2), I-Aufruf eines Async Bibliotheksverfahren, die:
- Checks ein lokaler Cache
- Downloads Daten asynchron
- Fügt die Daten in den Cache
Der Caching-Code kann nicht asynchron erstellt werden. Daher enthält die Bibliotheksmethode sowohl blockierenden als auch asynchronen Code.
Q. Was ist der beste Weg, um das Blockieren des UI-Threads zu verhindern?
Ich verstehe von Stephen Cleary, nicht in asynchronen Code zu blockieren und Task.Run nicht in Bibliotheksmethoden zu verwenden. Also muss ich ...
Verschieben Sie die Caching-Aufrufe in (2) z.
- Verwendung Task.Run (der Cache prüfen)
- Anruf die Bibliothek erneut Verfahren asynchron
- Verwenden Task.Run (die Daten an Cache)?
Gibt es einen besseren Weg?
Haben Sie etwas Code, den Sie teilen könnten? –
Hängt von Ihrer Definition von "besser" ab. Wenn Sie den Cache-Code nicht ändern können und async/await verwenden möchten, ist die Verwendung von 'Task.Run()' für den Caching-Code "korrekt". – Jcl