相关疑难解决方法(0)

如何从getter或setter调用异步方法?

在C#中从getter或setter调用异步方法最优雅的方法是什么?

这里有一些伪代码可以帮助解释自己.

async Task<IEnumerable> MyAsyncMethod()
{
    return await DoSomethingAsync();
}

public IEnumerable MyList
{
    get
    {
         //call MyAsyncMethod() here
    }
}
Run Code Online (Sandbox Code Playgroud)

c# async-ctp

189
推荐指数
7
解决办法
10万
查看次数

在写入该值之前检查变量是否包含特定值是否合理?

if (var != X)
  var = X;
Run Code Online (Sandbox Code Playgroud)

是明智还是不合理?编译器是否总是优化if语句?是否有任何用例可以从if语句中受益?

如果var是volatile变量怎么办?

我对C++和Java答案感兴趣,因为volatile变量在两种语言中都有不同的语义.Java的JIT编译也可以带来改变.

如果我们总是用X覆盖var,那么if语句会引入分支和附加读取,所以它很糟糕.另一方面,如果var == X然后使用此优化,我们只执行读取,并且我们不执行写入,这可能会对缓存产生一些影响.显然,这里有一些权衡.我想知道它在实践中的样子.有没有人对此做过任何测试?

编辑:

我最感兴趣的是它在多处理器环境中的样子.在一个微不足道的情况下,首先检查变量似乎没有多大意义.但是,当处理器/核心之间必须保持高速缓存一致性时,额外检查可能实际上是有益的.我只是想知道它会产生多大的影响?处理器本身也不应该做这样的优化吗?如果var == X再次分配它值X不应该"弄脏"缓存.但我们可以依靠这个吗?

c++ java optimization performance caching

25
推荐指数
4
解决办法
1159
查看次数

标签 统计

async-ctp ×1

c# ×1

c++ ×1

caching ×1

java ×1

optimization ×1

performance ×1