(环境: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)中调用的等待时间值;请参阅以下日志中的结果:
但是,出于某种原因,即使参数 clientId ,一些线程也会产生相同的线程数和偏移值。 strong>按时间顺序正确提供(见下文)。
我不明白的是 foreach循环 如何完成,循环中只有1/2的功能是正确的 - 在这种情况下循环正确读取下一个 clientId 但忘记增加偏移量值。
THX。