簡體   English   中英

通過功能<task>作為參數</task>

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM