在任务 c# 中更新 Int32

Update Int32 in Task c#

有什么方法可以在任务中增加 int 的值吗? 或者这是在任务中递增 int 的正确语法吗? 示例代码:

public int erCount = 9;
static void Main(string[] args){
    Task.Factory.StartNew(() => { 
        ...do some task
        if(errorfound)
            erCount++;
    });
    Task.Wait();
    Console.Writeline(erCount.toString());
}

我似乎无法在线程内增加值。 任何帮助都会很棒!

你可以使用 Interlocked.Increment():

public int erCount = 9;
static void Main(string[] args){
    var task = Task.Factory.StartNew(() =>{ 
        ...do some task
        if(errorfound)
            Interlocked.Increment(ref erCount);
    });

    task.Wait(); // Wait for the task to complete before showing the error count
    Console.Writeline(erCount.toString());
}

它不递增的原因是:

Console.Writeline(erCount.toString());

在错误计数递增之前执行。

最后将它移到任务中,它应该可以工作。

您可能需要阅读 Task 并行库以及多线程的工作原理。

只要您不在多个线程中修改 erCount,您的代码就没有问题。在这种情况下,您需要一把锁或 Interlocked.Increment.

您的问题是您没有等待开始的 Task 完成。

public static int erCount = 9;
static void Main(string[] args)
{
    var task = Task.Factory.StartNew(() => 
    { 
        ...do some task
        if(errorfound)
            Interlocked.Increment(ref erCount);
    });
    task.Wait();//Wait for the task to complete
    Console.Writeline(erCount.toString());
}

您可以完全删除共享字段和 return 错误计数。这样你就可以避免不必要的同步。

public static int erCount = 9;
static void Main(string[] args)
{
    var task = Task.Factory.StartNew(() => 
    { 
        int localErrorCount =0;
        ...do some task
        if(errorfound)
            localErrorCount++;
       return localErrorCount;
    });
    int errors = task.Result;//Wait for the task to complete and get the error count
    erCount += errors;
    Console.Writeline(erCount.toString());
}