2016-03-18 7 views

Antwort

3

Ja Sie es mit der Result Eigenschaft direkt nach dem Aufruf der Methode tun können:

var result = someClass.myAsyncMethod(someParameter).Result; 

und eine bessere Art und Weise ist es zu wickeln in Task.Run() wie Deadlocks zu vermeiden:

var result = Task.Run(() => { 

    return someClass.myAsyncMethod(someParameter); 

}).Result; 

Ich fand auch diese RunSynchronously() method auf MSDN, aber das wird Server Ihre Frage nicht, wie Sie einen einfachen Code on-line wollen.

+0

That wartet auf die Aufgabe, bis zum Abschluss zu laufen? – Alexandru

+0

wird der Aufrufer-Thread blockiert, bis die Aufgabe das Ergebnis zurückgibt –

+1

@ EʜsᴀɴSᴀᴊᴊᴀᴅ: Können Sie bitte zeigen, was die Syntax für 'Task.Run()' ist? –

1

Wenn Sie sich diese oft machen Sie eine kleine Erweiterung schreiben kann

public static class TaskExtensions 
{ 
    public static T SyncResult<T>(this Task<T> task) 
    { 
     task.RunSynchronously(); 
     return task.Result; 
    } 
} 

Dann können Sie verwenden:

var result = Task.SyncResult();