我在我的網站上自動執行一些任務,但我目前被卡住了。C#石英比賽條件
public void Execute(JobExecutionContext context)
{
var linqFindAccount = from Account in MainAccounts
where Account.Done == false
select Account;
foreach (var acc in linqFindAccount)
{
acc.Done = true;
// stuff
}
}
的問題是,當我開始多線程第一線程會被分配到相同的第一個帳戶,因爲它們設置在同一時間的完成值設置爲true。我該如何避免這種情況?
編輯:
private object locker = new object();
public void Execute(JobExecutionContext context)
{
lock (locker)
{
var linqFindAccount = from Account in MainAccounts
where Account.Done == false
select Account;
foreach (var acc in linqFindAccount)
{
Console.WriteLine(context.JobDetail.Name + " assigned to " + acc.Mail);
acc.Done = true;
// stuff
}
}
}
Instance [ 2 ] assigned to [email protected]
Instance [ 1 ] assigned to [email protected]
首先兩個線程得到分配給第一個帳戶,即使列表包含30個賬戶。
謝謝。的
private object locker = new object();
你能否給出Execute()方法shoydl究竟acheieve的更多細節?只需更新找到的帳戶的完成屬性?爲什麼你需要多線程呢? – sll
你將要遇到某種鎖對象。看到(可能更好的鏈接,但這是我發現的第一個)http://stackoverflow.com/questions/779533/thread-safety-object-static-or-not – Eddy
@sllev我更新完成的帳戶的屬性,問題是我同時啓動了大約20個線程,並且第2-3個線程被分配到相同的第一個帳戶,因爲他們同時啓動並且在第一個帳戶中完成值設置爲false。時間,我需要多線程,因爲它更快。 – mtnoob