小编Tom*_* K.的帖子

何时使用Task.Delay,何时使用Thread.Sleep?

什么时候使用Task.DelayThread.Sleep有很好的规则?

  • 具体来说,是否有一个最小值来提供一个有效/高效的另一个?
  • 最后,由于Task.Delay导致异步/等待状态机上下文切换,是否有使用它的开销?

c# multithreading task-parallel-library

343
推荐指数
5
解决办法
20万
查看次数

决定何时使用ConfigureAwait(false)

如果"await"点之后的调用图中的语句不访问任何类型不是从System.Windows.UIElement类派生的对象,那么我们可以说开发人员安全地使用ConfigureAwait(false)来获取Windows Mobile应用程序吗?

除了更新GUI元素之外,还必须在UI线程上执行哪种语句?

c# async-await

9
推荐指数
1
解决办法
1668
查看次数

异步/等待代码中的竞争条件

我只是想知道下面的代码中是否出现竞争条件:

int readingFiles;
async Task<string> ReadFile (string file)
{    
    ++readingFiles;

    var text = await Stream.ReadFileAsync(file);

    --readingFiles;

    return text;
}
Run Code Online (Sandbox Code Playgroud)

如果线程池线程执行ReadFile方法,则readFiles将由两个不同的线程访问,而readingFiles变量不受任何同步惯用法的保护.

这意味着对于执行"--readingFiles"的其他线程,readFiles的第一次更新不应该是可见的.但是,在"--readingFiles"之后,我从未见过readFiles等于-1.我检查同一个线程是否使用Thread.CurrentThread执行++和 - 操作.在大多数情况下,它不是同一个线程,我仍然没有看到readingFiles为-1.

即使存在竞争条件且readingFiles不易变,为什么我不能看到这种竞争条件的影响?

c# multithreading asynchronous race-condition async-await

9
推荐指数
2
解决办法
3496
查看次数