在任务 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());
}
有什么方法可以在任务中增加 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());
}