2
下面的代碼提供錯誤CS0121,超載分辨率和異步等待
的調用以下方法或屬性之間曖昧:「
RunTask(System.Func<System.Threading.Tasks.Task>)
」和「RunTask(System.Action)
」
static void RunTask(Func<Task> intTask)
{
}
static void RunTask(Action voidTask)
{
}
static async Task DoAsyncTask()
{
await Task.Delay(500);
}
public static void Main(string[] args)
{
var asyncTask = new Func<Task>(DoAsyncTask);
RunTask(DoAsyncTask);
}
但下面的代碼可編譯
static void RunTask(Func<Task> intTask)
{
}
static void RunTask(Action voidTask)
{
}
static async Task DoAsyncTask()
{
await Task.Delay(500);
}
public static void Main(string[] args)
{
var asyncTask = new Func<Task>(DoAsyncTask);
RunTask(asyncTask);
}
爲什麼這麼說?
很公平,但爲什麼一個委託可以編譯? – imgen
因爲您已明確聲明asyncTask的類型爲Func,因此編譯器很容易。 –
Moeri