首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有最好的方法来实现线程之间的延迟?

是否有最好的方法来实现线程之间的延迟?
EN

Stack Overflow用户
提问于 2020-09-25 09:15:55
回答 1查看 225关注 0票数 0

这个用法很简单

我有这个来启动线程

主班

代码语言:javascript
复制
 for (int x = 1; x <= numThreads; x++)
    {
        new ThreadComponent(x, this, creator).init();
    }

线程类

代码语言:javascript
复制
public void init()
{
    thread = new Thread(doLogic);
    thread.IsBackground = true;
    thread.Start();
}
void doLogic()
{
    while (true)
    {
        
            doLogicGetData();
    }

}

这个想法是线程执行需要大约。6秒,我想要6个线程,从1秒间隔开始

代码语言:javascript
复制
 1------1------

  2------2------

   3------3------ 

    4------4------

     5------5------

      6------6------ 

我看到了很多关于使用计时器或cron作业的想法,但我不知道如何正确地实现它们。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-25 09:54:49

在.Net中解决这个问题的一个更“规范”的方法是使用任务并行库而不是手动控制线程。下面的控制台程序演示了如何在后台线程上运行6个线程,在它们之间延迟一秒钟。

代码语言:javascript
复制
class Program
{
    public async static Task Main()
    {
        var cts = new CancellationTokenSource();

        List<Task> tasks = new List<Task>();

        for (int i = 0; i < 6; i++)
        {
            tasks.Add(Task.Run(() => DoWork(cts.Token), cts.Token));
            await Task.Delay(1000);
        }

        Console.WriteLine("Press ENTER to stop");
        Console.ReadLine();
        Console.WriteLine("Waiting for all threads to end");
        cts.Cancel();
        await Task.WhenAll(tasks);
    }

    public static void DoWork(CancellationToken token)
    {
        while (!token.IsCancellationRequested)
        {
            Console.WriteLine($"Doing work on thread {Thread.CurrentThread.ManagedThreadId}");
            Thread.Sleep(10000); // simulating 10 seconds of CPU work;
        }
        Console.WriteLine($"Worker thread {Thread.CurrentThread.ManagedThreadId} cancelled");
    }
}

在文件中很好地解释了使用任务并行库的异步编程

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64061245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档