任务和全局变量C#

BM

我有一个由事件处理程序启动的函数。在此函数中,将创建一个新任务,然后运行该任务以设置稍后将在另一个事件处理程序中设置的全局变量。

这两个之间还有另外两个函数,它们不会更改这些函数中使用的任何变量。但是,这看起来像是这样。

private void EventWhereINeedTheGlobalVariableLater(object sender, Event e)
{
    //...work...

    need _variableIneed


    //....more work...
}


private void EventWhereISetGlobalVariable(object sender, Event e)
{
    //....work....
    //...make cancellationToken...
    //groups, isCommonalityGroup are other global variables already set. 

    Task.Factory.StartNew(() =>
    {
        // Clear variable to get new value
        _variableIneed = null;

        // Execute query to get new value
        _variableIneed = _workingManager.GetValue(groups, isCommonalityGroup, cancellationToken);

       RefreshView();

    }, cancellationToken);
}

我遇到了竞争条件,_variableIneed在第二个事件处理程序中我需要的变量为null,而不能为null。如果我没有经过并尝试创建足够的事件以使wpf程序崩溃,它会很好地工作,但是即使这样做,我也需要它工作。

我有什么办法可以克服这些比赛条件?

我试过使用.ContinueWith带有OnlyOnRanToCompletion的选项还有其他我可以尝试的方法吗?

**请注意,我无法更改事件的排序/处理/处理方式。这是石材设计中的漂亮设置,我只需要解决它,并或多或少地保持它的状态即可。

**更新

我也尝试过ParallelExtensionsExtrasOrderedTaskScheduler类中使用,但最终仍无法获得所需变量的空引用。

务实的

当您Task要生成一个值时,请勿将结果设置为全局变量,而要将该结果作为Result任务的并存储该任务。当稍后需要其他一些代码时,可以从任务中获取它。这将允许Task类处理所有复杂的同步逻辑,防止在任务实际计算结果之前使用结果,等等。

当然,对于需要使用结果的事件,它大概不需要阻塞该任务,而是在任务完成后异步执行需要结果的其余代码。通过await在该任务上使用可以很容易地做到这一点。如果仅使用.NET 4.0,则可以ContinueWith显式使用

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

任务和全局变量C#

来自分类Dev

类实例的C#全局变量

来自分类Dev

目标c中的Swift全局变量和全局函数

来自分类Dev

全局变量之上的单个任务变量

来自分类Dev

如何为发布和调试模式C#设置不同的全局变量值

来自分类Dev

如何为发布和调试模式C#设置不同的全局变量值

来自分类Dev

使用全局变量和辅助函数添加c#文件,而无需添加网页

来自分类Dev

C ++如何区分对全局变量的调用和对全局变量的声明?

来自分类Dev

MPI和全局变量

来自分类Dev

数组和全局变量

来自分类Dev

全局变量和innerHTML

来自分类Dev

当前用户全局变量C#桌面应用

来自分类Dev

如何在C#中创建全局变量?

来自分类Dev

如何在C#中使用全局变量

来自分类Dev

使用C#从异步方法分配全局变量

来自分类Dev

c#如何存储在全局变量中

来自分类Dev

C# 使用全局变量时遇到问题

来自分类Dev

c char指针的内存和全局变量

来自分类Dev

C ++全局变量声明

来自分类Dev

C ++构造全局变量

来自分类Dev

静态全局变量与全局变量C

来自分类Dev

局部变量和全局变量

来自分类Dev

C ++全局变量与Java实例变量

来自分类Dev

生成函数和全局变量

来自分类Dev

Perl中的局部和全局变量

来自分类Dev

超全局变量和htmlentities

来自分类Dev

静态和全局变量存储说明

来自分类Dev

异步流和全局变量

来自分类Dev

Python全局变量和回调