gpt4 book ai didi

c# - 为什么调用不明确? 'Task.Run(Action)' 和 'Task.Run(Func)'

转载 作者:IT王子 更新时间:2023-10-29 04:19:17 30 4
gpt4 key购买 nike

考虑以下代码:

public void CacheData()
{
Task.Run((Action)CacheExternalData);
Task.Run(() => CacheExternalData());

Task.Run(CacheExternalDataTask);

Task.Run(CacheExternalData);
}

public Task CacheExternalDataTask()
{
// Long running code
return Task.FromResult("Data");
}

public void CacheExternalData()
{
// Long running code
}

为什么 Task.Run(CacheExternalData) 不明确Task.Run(CacheExternalDataTask) 不是

当使用 CacheExternalData 调用 Task.Run 时,我本以为编译器很清楚该方法返回一个Task 并且它应该解析为 Action

最佳答案

应该很清楚,但是语言规范从未说过不匹配的返回类型会在重载解析期间产生任何影响。因此,没有规则说更喜欢 ActionFunc<Task> .如果Action会被选中,当然,它会起作用。如果Func<Task>会被选中,那么肯定会出现错误。但无论选择哪一个,重载解析都必须成功,并且没有考虑到这一点。

这应该是固定的 with new overload resolution in C# 7.3 .

关于c# - 为什么调用不明确? 'Task.Run(Action)' 和 'Task.Run(Func<Task>)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51837722/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com