在Task中填充对象

时间:2016-07-14 08:17:57

标签: c# task-parallel-library

我开始了解TPL,现在有疑问。 我有类Worker在构造函数中启动Task。我将这些任务与手动重置事件同步。但我想得到一些关于此的统计数据。所以我试着在这个Task中填充对象。这是个好主意吗?

 public Worker(...)
    {
       ...
        StatisticItem = new StatisticItem();
      ....

        Task = Task.Factory.StartNew(() =>
        {
           //Manual reset event
            WaitForSignalToStart.WaitOne();
            while (source.IsMyTurn(RepeatOrder))
            {
                Item item;
                var realTimeWatch = new Stopwatch();
                while (TryGetNext(out item))
                {
                   ...
                    DoWork()
                    StatisticItem.PlanItemId =...
                    StatisticItem.CommandAndQueryName =...
                    StatisticItem.WokrerId = ...
                    StatisticItem.ThreadId = ...
                    StatisticItem.Date = ...

                 }
        }, tokenSource.Token, TaskCreationOptions.LongRunning, TaskScheduler.Current);
    }

2 个答案:

答案 0 :(得分:1)

只要您只有一个任务访问此特定StatisticItem,您就可以了。这是有效的,因为lamba语句能够使用它们在其中创建的上下文中的变量。

答案 1 :(得分:1)

是的,您可以这样做,但如果StatisticItem是一个字段,则只能激活一个任务。另外,建议锁定StatisticItem