C#线程问题 - 使用incorect参数生成的线程

时间:2016-03-18 14:52:35

标签: c#

(环境:Azure网站。拥有,非共享1核心实例) 我有以下循环产生所需的线程数。

    clientIds = comUtility.getAllSyncableClientIds();

    int numOfThreads = clientIds.Count();
    Thread[] exportThreads = new Thread[numOfThreads];

    foreach (int clientId in clientIds)
    {
        offset = offset + 10000; // time to wait
        exportThreads[threadId] = new Thread(() => RunExportToAzureOnItsOwnThread(pId, clientId, offset, threadId));
        exportThreads[threadId].Start();
        threadId++;
    }

大多数情况下,它似乎工作正常。所有线程一个接一个地产生,每个线程都有自己的 offset 参数,这个参数只是在每个单独的线程Thread.Sleep(offset)中调用的等待时间值;请参阅以下日志中的结果:

enter image description here

但是,出于某种原因,即使参数 clientId ,一些线程也会产生相同的线程数偏移值。 strong>按时间顺序正确提供(见下文)。

enter image description here

我不明白的是 foreach循环 如何完成,循环中只有1/2的功能是正确的 - 在这种情况下循环正确读取下一个 clientId 但忘记增加偏移量值。

THX。

0 个答案:

没有答案