此代码怎么可能
TaskManager.RunSynchronously<MyObject>(fileMananager.BackupItems, package);
导致编译错误
The call is ambiguous between the following methods or properties:
'TaskManager.RunSynchronously<MyObject>(System.Action<MyObject>, MyObject)' and
'TaskManager.RunSynchronously<MyObject>(System.Func<MyObject, bool>, MyObject)'
当动作的签名是]时>
public void BackupItems(MyObject package)
和“模糊”方法是
static class TaskManager { public static void RunSynchronously<TInput>(Action<TInput> task, TInput param) { Task.Factory.StartNew(() => task(param)); } public static bool RunSynchronously<TInput>(Func<TInput, bool> task, TInput param) { return Task.Factory.StartNew(() => task(param)).Result; } }
在我看来,这些方法之间有很大的区别。我在这里想念什么?
编辑:
除了接受的答案之外,我还遇到了类似问题的解决方案。这是link。
[这段代码TaskManager.RunSynchronously
原因是方法的返回类型不是其签名的一部分。因此,在解决正确的重载时,编译器仅查看方法的参数。
我遇到了同样的问题,解决方案是:
当今对此的另一种可能的解释是: