请考虑以下代码:
using System.IO;
using System.Threading.Tasks;
public class MyClass
{
private int count;
public async Task<int> MyReadAsync(Stream stream, byte[] buffer)
{
var read = await
stream.ReadAsync(buffer, 0, buffer.Length).ConfigureAwait(false);
this.count += read;
return read;
}
}
Run Code Online (Sandbox Code Playgroud)
我们假设MyReadAsync从WPF应用程序的事件处理程序直接调用此方法,如下所示:
private async void OnWhatever(object sender, EventArgs args)
{
await myObject.MyReadAsync(this.stream, this.buffer);
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
ConfigureAwait(false)允许以行开头的代码部分this.count += read;可以在任何线程池线程上执行,对吗?MyReadAsync,不能保证this.count += read;以相同的线程执行的代码部分是正确的吗?this.count += read;应该用适当的线程同步原语保护,对吗?是的,你是对的。为了避免任何线程同步问题,您应该在增加计数的行周围应用适当的锁定
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |