我想實現多線程的建議在這裏:Spawn Multiple Threads for work then wait until all finished開始等待多個線程 - ReSharper的抱怨修改封
代碼看起來像這樣:
var resetEvent = new ManualResetEvent(false);
var clientsCount = IDLocal.UserSessions.Count;
// Load sessions:
IDLocal.UserSessions = new IDSessions();
// Start thread for each client
foreach (IDSession session in IDLocal.UserSessions)
{
var clnt = session;
new Thread(
delegate()
{
Debug.WriteLine(Thread.CurrentThread.ManagedThreadId);
clnt.FailedToRespond = !this.SendDirect(data, this.GetHostAddress(clnt.HostName), clnt.PortNumber);
// If we're the last thread, signal
if (Interlocked.Decrement(ref clientsCount) == 0) resetEvent.Set();
})
.Start();
}
在這裏我得到了ReSharper警告:if (Interlocked.Decrement(ref clientsCount) == 0)
這表明,我訪問修改關閉(clientsCount)
那是一個有效的SUG GESTION?
是的,這是一個有效的建議。應該避免變量關閉變量。 –
這不是規則的例外,因爲他正在變異的值是要跨線程共享的變量? – dugas
@dugas是的,這不是警告的一個例子,所以在這裏應該忽略警告。警告是關於捕獲變量而沒有意識到它們的值會改變。在這種情況下,您想要更改這些值。 – hvd