Async-Methode true zurückgegeben, oder false, in einer Aufgabe
Ich weiß, dass ein async
Methode kann nur zurück void
oder Task
. Ich habe gelesen, ähnliche Methoden für Exception-handling in async
Methoden. Und ich bin neu in async
Programmieren, und ich bin auf der Suche nach eine einfache Lösung.
Meine async
- Methode führt eine Sql-Abfrage. Wenn die Abfrage ok ist, sollte es teilt der Anrufer mit einem Boolean true
ansonsten ein false
. Meine Methode ist derzeit eine leere, so habe ich keine Möglichkeit zu wissen.
private async void RefreshContacts()
{
Task refresh = Task.Run(() =>
{
try
{
//run the query
}
catch { }
}
);
await refresh;
}
Ich einfach gerne ändern async
zu Task
so, dass in meinem catch
- Anweisung der Methode zurück false
ansonsten ein true
.
InformationsquelleAutor disasterkid | 2015-07-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es klingt wie Sie brauchen nur, um wieder eine
Task<bool>
dann:Würde ich persönlich nicht die Ausnahme abfangen, statt die Vermietung der Anrufer-check die Aufgabe, für einen fehlerhaften Zustand, aber das ist eine andere Sache.
catch { return false; }
nach der änderung meiner Rückkehr geben zuTask<bool>
ich bekam diese Warnung: "Da dieser Anruf nicht erwartete, Ausführung der aktuellen Methode weiter, bevor der Anruf abgeschlossen ist. In Betracht ziehen anwenden der 'erwarten' - operator auf das Ergebnis der Ausschreibung."Die überprüfung der Aufgabe, für einen fehlerhaften Zustand klingt interessant, können Sie bringen ein einfaches Beispiel?
Gut, wo bekommt man die Warnung, und Sie haben versucht folgenden Ihren Rat? Für die überprüfung der Aufgabe, für einen fehlerhaften Zustand - finden Sie in der Dokumentation für
Task
. Obwohl, wenn Sie erwarten die Aufgabe, die exception erneut ausgelöst, statt.Die Warnung wird angezeigt, überall habe ich die Methode aufgerufen
RefreshContacts()
Wenn ich auf add warten vor jedem Anruf, bedeutet das, dass ich das ändern sollte alle Funktionen, die diese Funktion ausführen zu async?Ja. Es klingt wie Sie grundlegend brauchen, um einen Schritt zurück und überlegen Sie, was es bedeutet, aktualisieren Sie die Kontakte asynchron...
InformationsquelleAutor Jon Skeet
Ändern Sie die Signatur der Methode zu
Task<bool>
. Dann, wenn Sie Ihre Methode ist deklariert als async-Sie können einfache Rückgabe ein boolescher Wert. Aber wie jon skeet gesagt, es gibt andere, möglicherweise bessere Wege, um Ihre szenarioPS: ein Weiteres häufiges Problem, die Sie möglicherweise haben, wenn Sie eine Methode ohne async. Dann können Sie zurück
Task.FromResult(true)
wie diese:catch { return false; }
nach der änderung meiner Rückkehr geben zuTask<bool>
ich bekam diese Warnung: "Da dieser Anruf nicht erwartete, Ausführung der aktuellen Methode weiter, bevor der Anruf abgeschlossen ist. In Betracht ziehen anwenden der 'erwarten' - operator auf das Ergebnis der Ausschreibung."Diese Nachricht hat nichts zu tun mit der catch-Anweisung. Wahrscheinlich haben Sie keine asynchrone Aufrufe in der
try
Teil. In dem Fall gibt es keinen Punkt in mitasync
oder Aufgaben.InformationsquelleAutor Boas Enkler
Sorry, aber ich glaube, y ' all irreführend Menschen hier.
Sehen Sie im Microsoft-Artikel hier.
Sehr einfaches Beispiel, das zeigt, wie wir zurückkehren können, ein Wert der bool oder string-Typ von Aufgabe.
Ich bin Entsendung der C# - code hier für die Nachwelt:
InformationsquelleAutor woohoo