C#线程安全代码

use*_*169 1 c# multithreading

这段代码线程安全吗?

DoStuff 使用Task在新线程中调用.

Task.Factory.StartNew(() => DoStuff());
Run Code Online (Sandbox Code Playgroud)


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);
}
Run Code Online (Sandbox Code Playgroud)

一个只用于存储数据的结构:

public struct SalesRecord
{
    public uint Sales;
    public double Amount;
}
Run Code Online (Sandbox Code Playgroud)

东西

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Sri*_*vel 9

这段代码线程安全吗?

是的.此代码不使用任何共享状态.根据定义,不使用任何共享状态的代码是线程安全的.

您可以DoStuff在任意数量的线程中同时调用而不会出现任何问题.也就是说,DoStuff方法虽然不是很有用.