BackgroundWorker
なんらかの理由で代替を実装していますが、次のパブリック プロパティを実装する必要があります。
public bool CancellationPending { get; private set; }
public bool IsBusy { get; private set; }
public bool WorkerReportsProgress { get; set; }
public bool WorkerSupportsCancellation { get; set; }
彼らがどのような目的を果たしているのか、あなたは知っていると思いますBackgroundWorker
。したがって、それらは異なるスレッドによってアクセス/変更される可能性があります。マルチスレッドのためにそれらを「保護」する方法が心配です。volatile
として宣言すれば十分だと思いましたvolatile
が、自動プロパティには適用できません。
私は何をすべきか?これらのプロパティのプライベート フィールドを作成して宣言する必要がありますvolatile
か? または、各およびブロックlock
内で ingを使用する必要がありますか?get
set
これは非常に一般的なシナリオであると思います-プロパティ(できれば自動プロパティ)をスレッドセーフにします。この例では、すべてのプロパティがアトミック型であることに注意してください。
編集:
必要なものを明確にするために、すべてのスレッドが常にプロパティの最新の値を読み取るようにする必要があります。これを参照してください: https://stackoverflow.com/a/10797326/1081467
volatile
繰り返しますが、 、またはlock
ing 、または何か他のものを使用することをお勧めしますか? ..bool
プロパティを使用する場合、原子性が保証されているため、2番目の問題 (最新の値を読み取る) だけが残っているため、これを正しく解決するにはどうすればよいですか? ? 非プリミティブ型のプロパティがある場合はどうなりますか? lock
それぞれget
とset
ブロックにsを入れますか?