Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#螺纹和螺纹。连接_C#_Multithreading_Parallel Processing - Fatal编程技术网

c#螺纹和螺纹。连接

c#螺纹和螺纹。连接,c#,multithreading,parallel-processing,C#,Multithreading,Parallel Processing,我有一个需要处理的10个项目的列表,每个项目使用一个单独的线程。代码应该是这样的: foreach (Item item in items) { Thread t = new Thread(() => { ProcessItem(item); }); t.Start(); } 我还需要暂停线程(1秒减去执行线程所需的时间)。在这种情况下,我应该使用Thread.Sleep吗?如果您不介意跳过线程的手动处理,那么下面的行应该完全按照您的要求执

我有一个需要处理的10个项目的列表,每个项目使用一个单独的线程。代码应该是这样的:

foreach (Item item in items)
{
    Thread t = new Thread(() =>
    {
        ProcessItem(item);
    });
    t.Start();
}

我还需要暂停线程(1秒减去执行线程所需的时间)。在这种情况下,我应该使用Thread.Sleep吗?

如果您不介意跳过线程的手动处理,那么下面的行应该完全按照您的要求执行:

Parallel.ForEach(items, ProcessItem);
或者在每次处理之前睡觉(尽管这没有多大意义):


如果您不介意跳过线程的手动处理,那么下面的行应该完全按照您的要求执行:

Parallel.ForEach(items, ProcessItem);
或者在每次处理之前睡觉(尽管这没有多大意义):


您将使用
Thread.Join
等待其他线程完成其工作

Thread.Sleep
基本上会等待指定的毫秒数

Thread.Sleep
确实有副作用,不推荐使用

在您的上下文中需要注意以下几点:

  • 如果没有更多可用线程(如果
    项的数量增加了怎么办?)
  • 线程是否访问一些共享资源

  • 检查
    线程池
    线程安全
    操作。

    您将使用
    线程。加入
    以等待其他线程完成其工作

    Thread.Sleep
    基本上会等待指定的毫秒数

    Thread.Sleep
    确实有副作用,不推荐使用

    在您的上下文中需要注意以下几点:

  • 如果没有更多可用线程(如果
    项的数量增加了怎么办?)
  • 线程是否访问一些共享资源

  • 检查
    线程池
    线程安全
    操作。

    启动线程的代码看起来不错

    您必须使用
    Thread.Sleep(持续时间以毫秒为单位)
    使线程暂停一段持续时间


    Join
    将暂停当前线程,直到您加入的线程未完成其处理。

    启动线程的代码看起来正常

    您必须使用
    Thread.Sleep(持续时间以毫秒为单位)
    使线程暂停一段持续时间


    Join
    将暂停当前线程,直到您加入的线程未完成其处理。

    如果出于某种原因,您不想使用
    并行。ForEach

    Thread[] threads = new Thread[10];
    int count = 0;
    foreach (Item item in items)
    {
        Thread t = new Thread(() =>
        {
            ProcessItem(item);
        });
        t.Start();
        threads[count++]=t;
    }
    for (int i=0;i<10;++i)
        threads[i].Join();
    
    Thread[]threads=新线程[10];
    整数计数=0;
    foreach(项目中的项目)
    {
    线程t=新线程(()=>
    {
    处理项目(项目);
    });
    t、 Start();
    线程[count++]=t;
    }
    
    对于(int i=0;i,如果出于某种原因,您不想使用
    并行。ForEach

    Thread[] threads = new Thread[10];
    int count = 0;
    foreach (Item item in items)
    {
        Thread t = new Thread(() =>
        {
            ProcessItem(item);
        });
        t.Start();
        threads[count++]=t;
    }
    for (int i=0;i<10;++i)
        threads[i].Join();
    
    Thread[]threads=新线程[10];
    整数计数=0;
    foreach(项目中的项目)
    {
    线程t=新线程(()=>
    {
    处理项目(项目);
    });
    t、 Start();
    线程[count++]=t;
    }
    
    对于(inti=0;i使用
    Thread.Sleep

    这是不同的事情

    Thread.Sleep
    阻塞(停止)当前线程一段时间

    Thread.Join
    阻塞(停止)当前线程,直到调用
    Join
    的线程完成



    也可考虑使用AS @ nVoigt建议。

    < P>使用<代码>线程。睡眠< /代码> ./P> 这是不同的事情

    Thread.Sleep
    阻塞(停止)当前线程一段时间

    Thread.Join
    阻塞(停止)当前线程,直到调用
    Join
    的线程完成



    也可以考虑使用AS @ nVoigt建议。这个代码有什么问题吗?是不是有问题?是的,代码>线程。(代码)>你可以阅读MSDN……这个代码有什么问题吗?有问题吗?是的,<代码>线程。睡眠()/代码> -你可以阅读MSDN……有副作用吗?@MartinJames:我是说在上下文中,

    sleep()
    可以阻止当前线程。sleep()有副作用吗?@MartinJames:我是说在上下文中,
    sleep()
    可以阻止当前线程。