两个任务之间的 X 秒延迟 c#

Posted

技术标签:

【中文标题】两个任务之间的 X 秒延迟 c#【英文标题】:X second delay between two tasks c# 【发布时间】:2020-12-12 03:32:34 【问题描述】:

我想在任务 1 和任务 2 之间延迟 80 毫秒。 但是这里任务 1 和任务 2 一起运行。 我的代码:

private CancellationTokenSource cts = new CancellationTokenSource();
    private async void button4_Click(object sender, EventArgs e)
    
        //SendBuyOrder();
        try
        
            await Task.WhenAll(Task1(cts.Token), Task2(cts.Token));
            //await Task.WhenAll(Task1(cts.Token));
        
        catch (Exception ex)
        
        


    

    public void send(int t)
    
        txtResult.AppendText("Task" + t + ": " + DateTime.Now.ToString("hh:mm:ss.fff"));
        txtResult.AppendText(Environment.NewLine);
        txtResult.AppendText(Environment.NewLine);
    

    public async Task Task1(CancellationToken token)
    
        while (true)
        
            token.ThrowIfCancellationRequested();
            await Task.Delay(Convert.ToInt32(txtRepeatInterval.Text), token);
            send(1);
        
    

    public async Task Task2(CancellationToken token)
    
        while (true)
        
            token.ThrowIfCancellationRequested();
            await Task.Delay(Convert.ToInt32(txtRepeatInterval.Text), token);
            send(2);
        
    

这里,Task 1 和 Task 2 一起运行,并且在 Task 1 再次运行 80 毫秒后。我希望在启动任务 1 后 80 毫秒执行任务 2

enter image description here

【问题讨论】:

附带说明,Task1Task2 通常不适合用于方法,尤其是异步方法。方法名应该是verbs or verb phrases,异步方法应该有Async suffix。 【参考方案1】:

你可以做一个同时完成这两个任务的任务:

public async Task Task3(CancellationToken token)

    while (true)
    
        token.ThrowIfCancellationRequested();
        await Task.Delay(Convert.ToInt32(txtRepeatInterval.Text), token);
        send(1);
        await Task.Delay(80, token);
        send(2);
    

【讨论】:

以上是关于两个任务之间的 X 秒延迟 c#的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI:如何使用延迟在两个图像之间设置动画过渡?

c#如何得出两个时间秒数差

c# 每 x 秒运行一次数据库任务

x 秒后在两个功能之间切换

如何在执行一组工作人员之间正确延迟

dos下执行bat文件,如何让两个命令之间自动延迟3秒后再继续执行?