Ich habe eine Methode in meiner Ansicht nach ModellUnterschied zwischen den Aufruf eines Asynchron-Methode und Task.Run ein asynchrones Verfahren
private async void SyncData(SyncMessage syncMessage)
{
if (syncMessage.State == SyncState.SyncContacts)
{
this.SyncContacts();
}
}
private async Task SyncContacts()
{
foreach(var contact in this.AllContacts)
{
// do synchronous data analysis
}
// ...
// AddContacts is an async method
CloudInstance.AddContacts(contactsToUpload);
}
Wenn ich SyncData
von den UI-Befehle aufrufen, und ich bin die Synchronisierung über einen großen Teil der Daten UI friert ein. Aber wenn ich SyncContacts
mit diesem Ansatz nennen
private void SyncData(SyncMessage syncMessage)
{
if (syncMessage.State == SyncState.SyncContacts)
{
Task.Run(() => this.SyncContacts());
}
}
Alles ist in Ordnung. Sollten sie nicht gleich sein? Ich dachte, dass nicht mit warten auf den Aufruf einer asynchronen Methode erstellt einen neuen Thread.
'async' bedeutet nicht immer, dass andere Threads beteiligt sind - siehe [es gibt keinen Thread] (http://blog.stephencleary.com/2013/11/there-is-no-thread.html). –
In Ihrem SyncData fehlt das Schlüsselwort await, das den Compiler anweist, mit der anderen Verarbeitung fortzufahren. Im Moment sollte Ihre SyncData-Methode blockieren, was korrekt ist –