den folgenden Code-Schnipsel Betrachten in dem die MyMethod
und seine asynchrone Version MyMethodAsync
auf unterschiedliche Weise aufgerufen:Warum auf Asynchron-Funktion Task.Run Verwendung nicht zurück Aufgabe <Task<T>>
using System;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static int MyMethod()
{
System.Threading.Thread.Sleep(1000);
return 42;
}
static async Task<int> MyMethodAsync()
{
await Task.Delay(1000);
return 42;
}
static void Main(string[] args)
{
var result1 = MyMethod(); // int
var result2 = MyMethodAsync(); // Task<int>
var result3 = Task.Run(() => MyMethod()); // Task<int>
var result4 = Task.Run(() => MyMethodAsync()); // Task<int>
}
}
}
In jedem Fall I habe den Rückgabetyp kommentiert.
Die Frage ist, warum der Typ von result4
ist zu? Sollte es nicht Task<Task<int>>
sein?
BTW, gibt es einen Fall, dass der Aufruf einer asynchronen Methode von Task.Run
von Vorteil sein könnte?