[英]Pass Func<Task> as parameter
我有一个方法:
public async Task Method(Func<Task> action)
这个 function 基本上检查自上次运行时间以来是否经过了几秒钟。
我试过了:
Func<Task> timer = async () => { await Task.Delay(3000);};
并像那样调用它
Func<Task> check = await _className.Method(timer);
然而它说
无法将“void”隐式转换为“System.Func<System.Threading.Tasks.Task>”
基本上我无法将延迟任务传递给 function。
这是一个使用Func<Task>
调用 Method 的简单示例。
Func<Task> timer = async () => { await Task.Delay(3000);};
await Method(timer);
async Task Method(Func<Task> action)
{
await action();
}
我不确定您到底要做什么,但是这段代码有效:
public class Program
{
public static async Task Main(string[] args)
{
var sw = Stopwatch.StartNew();
Func<Task> timer = async () => { await Task.Delay(3000); };
var theTask = Method(timer);
await theTask;
Console.WriteLine(sw.ElapsedMilliseconds); // ~3000
}
public static async Task Method(Func<Task> action)
{
await action();
}
}
我只是把var theTask = Method(timer);
说明您可以在等待Task
之前将返回值分配给它。
好的,所以它就像 tymtam 已经说过的那样工作 - 看起来我的问题是试图将最终结果分配给 Func,我想我需要更多的睡眠。
谢谢你的帮助
编辑我需要这个:
Func<Task> check = async () => await _className.Method(timer);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.