[英]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.