Async & await - ich bin zu doof

hi,

in einem Beispiel habe ich zum ersten Mal async und await statements gesehen. Die entsprechende Doku dazu habe ich gelesen. Hier mein Zwischenergebnis:

Eine async methode wird immer nebenläufig gestartet, sobald sie ein await statement enthält.
Wenn ich irgendwann das Ergebnis dieser Methode haben möchte, verwende ich meinerseits ein await statement.
Daher muss die aufrufende Methode wieder async sein (denn await statements sind nur in async-methoden erlaubt).

Jetzt die Frage: Was wenn ich diesen Mechanismus nicht benutzen möchte?
Ich habe eine Library, die diesen Mechanismus verwendet. Aber ich möchte den ganzen Kram erstmal synchon haben.

Beispiel: meine Library Methode berechnet die n-te Primzahl. Das dauert. Trotzdem kann ich folgendes schreiben

public asnyc Task\<Int64\> getNthPrime(Int64 n)
{
 return await lib.getSinglePrime(n);
}

Tatsache ist, dass meine methode wieder asynchron ist. Wenn ich aber möchte, dass erstmal alles blockiert, weiß ich nicht, wie das aussehen soll.

Intuitiv hätte ich sowas erwartet

public Int64 getNthPrime(Int64 n)
{
 Task\<Int64\> resultTask = lib.getSinglePrime(n);
 resultTask.RunSynchronously();
 return resultTask.result;
}

solche Konstrukte erscheinen mir irgendwie logisch (ohne jetzt groß Ahnung davon zu haben). Trotzdem haben bisher alle meine Versuche nur zu Exceptions geführt.

Bitte bedenken, ich habe mein Beispiel stark vereinfacht. Konkret sieht mein Code derzeit so aus:

var cts = new CancellationTokenSource();
cts.CancelAfter(readTimeout\_ms);
cts.Token.Register(onReadTimeoutAction);
Task\<Int64\> primeTask = lib.getSinglePrime(n, cts);
???? how to wait ????
Int64 prime = primeTask.Result;
cts.Dispose();

Ihr seht also: ich möchte einen benutzerdefinierten Timeout haben und die library arbeitet mit der CancellationTokenSource-Klasse, von der ich auch nichts weiß.

Das Problem ist simpel aber irgendwie muss ich anfangen

Hallo!
Taskhat eine Wait() Methode.
Die ist genau dafür da: Darauf zu warten, dass der Task beendet ist und ein Ergebnis liefern kann.

Gruß,
Martin

stimmt natürlich. Ich bilde mir ein, genau das gestern versucht zu haben. Heute geht’s. Danke!