异步方法在不同线程中的延续-意味着对对象变量的协作式双线程访问吗?

第三

当我用异步方法编写时:

public class myGameLoop
{
    protected class GameObject
    {
      ....
    }

    protected GameObject [] myGameObjects;

    public async Task myMethod()
    {
        myPrologue(); //runs on caller thread 1
        await SomeLongOperation().ConfigureAwait(false); //runs on thread 2
        myContinuation(); //maybe on thread 2 or another one from pool
    }
}

有可能不在与myPrologue()相同的线程中执行myContinuation()。想象一下,调用者线程是游戏的抽奖线程。然后,如果myPrologue()更改了myGameObjects数组中的非原子对象,并且myContinuation()也可以使用它们,则我们无法从2个线程对对象/数组进行非同步访问,这可能会破坏它们。

是真的还是async / await在这种情况下有一些同步的东西?还是我应该避免使用ConfigureAwait(false)?(我不确定Monogame绘制线程同步上下文可以包含多少个线程,因此我将ConfigureAwait设置为false以防止意外死锁)。

斯蒂芬·克莱里(Stephen Cleary)

(我不确定Monogame绘制线程同步上下文可以包含多少个线程,因此我将ConfigureAwait设置为false以防止意外死锁)。

我认为这是误解。如果绘图线程具有专用于该线程的自己的同步上下文,则如果使用plain await,它将在该绘图线程上继续。在我看来,这就是您想要的

其原因ConfigureAwait(false)以“防止意外死锁”。只是通知await您,您不在乎需要恢复的上下文。因此,如果您确实在乎要恢复的上下文,那么您当然不应该使用ConfigureAwait(false)

有关更多信息,请参见我的async简介博客文章。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ndk中从不同线程调用java方法

来自分类Dev

如何在不同线程中处理 @KafkaListener 方法?

来自分类Dev

不同线程中SharedPreference的访问值

来自分类Dev

如何运行不同线程的方法访问变量?

来自分类Dev

从JavaFX中的不同线程更新UI

来自分类Dev

QSqlDatabase不同线程中的并发查询

来自分类Dev

在不同线程中运行任务

来自分类Dev

QSqlDatabase不同线程中的并发查询

来自分类Dev

从不同线程中的QFile读取

来自分类Dev

不同对象,不同线程上的同步方法

来自分类Dev

访问不同线程中的不同列表元素

来自分类Dev

如何在不同线程中对同一类的多个对象进行方法调用?

来自分类Dev

捕获在不同线程中运行的方法的异常的正确方法是什么?

来自分类Dev

QThread:从不同线程修改变量的安全方法?

来自分类Dev

Eclipse ProgressMonitor在不同线程中访问UI

来自分类Dev

在不同线程中的类之间传递变量?

来自分类Dev

从不同类中的不同线程修改JavaFX gui

来自分类Dev

C#从线程访问不同线程的变量

来自分类Dev

RabbitMQ中不同线程中的basicGet和basicAck

来自分类Dev

QTcpServer中的内存泄漏参与了不同线程中的连接

来自分类Dev

在C中的不同线程中从文件读取

来自分类Dev

如何在不同线程上同步部分方法

来自分类Dev

不同线程的输出分开

来自分类Dev

不同线程的输出分开

来自分类Dev

从不同线程中的消息循环返回操作结果

来自分类Dev

在Android中的不同线程之间同步回调

来自分类Dev

Java列表从列表中的不同线程收集结果

来自分类Dev

如何从Rust中的不同线程写入文件?

来自分类Dev

在Perl中的不同线程中使用全局数组

Related 相关文章

热门标签

归档