簡體   English   中英

阻止任務啟動

[英]Prevent Task from starting

TaskHolder類具有Task類型的屬性。 我將Task作為參數傳遞給構造函數,它立即啟動。 有沒有辦法阻止它啟動?

public class Worker
{
    public class TaskHolder
    {
        public TaskHolder(Task objective)
        {
            Objective = objective;
        }

        public Task Objective { get; set; }
    }

    public async Task DoSomething()
    {
        await Task.Delay(5000);
        Debugger.Break(); // Task starts, so debugger stops here!
        // Is there a way to prevent it from start?
    }

    [Test]
    public async Task TempTest()
    {
        // programm starts here:
        var t1 = new TaskHolder(DoSomething());
        await Task.Delay(10000);
    }
}

Task表示等待的操作的當前或將來結果。 如果該任務已經開始,那很有趣-但這與接收該任務的代碼無關。

如果您不想開始任何事情,則可能應該傳遞一個Action 您可以通過Task.RunAction創建Task 或者,您可以簡單地通過action()或action.Invoke()調用該動作。

如果要運行的是顯式異步的:可以傳遞Func<Task> 同樣,如果您想要代表最終狀態的Task ,則可以使用Task.Run啟動此類委托。 或者您也可以調用它。

(是否Invoke()它( Invoke()或將其傳遞給Task.Run()取決於您是否希望它對任何一個使用線程))

最終,當您調用DoSomething()開始運行代碼。 Task.Delay安排了一個計時器,然后代碼繼續到TaskHolder

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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