重载决议和异步等待

时间:2014-02-05 13:59:38

标签: c# .net asynchronous .net-4.5 c#-5.0

下面的代码给出了错误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);
}

为什么这样?

1 个答案:

答案 0 :(得分:3)

在尝试确定委派代表的最佳重载方法时,C#编译器不会将委托的返回类型考虑在内。

另见this question

相关问题