【发布时间】:2015-04-24 14:30:48
【问题描述】:
这段代码线程安全吗?
DoStuff 使用 Task 在新线程中调用。
Task.Factory.StartNew(() => DoStuff());
private void DoStuff()
{
List<SalesRecord> salesRecords = new List<SalesRecord>();
SalesRecord salesRecord1 = new SalesRecord {Amount = 10.0, Sales = 1};
SalesRecord salesRecord2 = new SalesRecord {Amount = 15.0, Sales = 1};
SalesRecord salesRecord3 = new SalesRecord {Amount = 1.0, Sales = 2};
salesRecords.Add(salesRecord1);
salesRecords.Add(salesRecord2);
salesRecords.Add(salesRecord3);
SalesRecord result = Util.SumSales(salesRecords);
}
只用于存储数据的结构:
public struct SalesRecord
{
public uint Sales;
public double Amount;
}
东西
public static class Util
{
public static SalesRecord SumSales(List<SalesRecord> records)
{
SalesRecord result = new SalesRecord();
result.Amount = records.FindAll(record => (record.Sales == 1)).Sum(record => record.Amount);
result.Sales = 1;
return result;
}
}
【问题讨论】:
-
我实际上并没有看到任何多线程正在发生,所以我从您提供的代码中猜测是的,它是线程安全的。除非你在不同线程之间访问东西,否则这段代码应该不是问题。
-
第二句。 DoStuff 是使用 Task 调用的。 @JoshL。
-
我看不到你真正调用 DoStuff 的地方 - 很高兴看到它用于做出有根据的决定。
-
@user1766169 只要一切都在同一个线程中完成,这并不重要。这是单线程代码。
-
我没有看到
static属性并且您只使用局部变量进行操作,在DoStuff之外不可能出现多线程问题。这使得DoStuff线程安全。
标签: c# multithreading