結城 浩 (著)
増補改訂版Java言語で学ぶデザインパターン入門
のSingleton を学習しています。
非同期処理によって、
インスタンスが作成されることが1個であることを保証したいです。
Javaでは、synchronizedをつけるだけで良いそうなのですが、
C#のasync await Taskや
**lock(追記)**を利用するとどのようにかくことができますでしょうか。
サイトを探してみたのですが、
メソッドに対して、非同期処理をかいているものはあったのですが、
if文の結果?に対してのものは見つかりませんでしたので
ご教示お願い致します。
(そもそも今回の場合はC#に置き換えることは不可でしょうか。)
Java
1public static synchronized Singleton getInstance(){ 2 if(singleton == null){ 3 singleton = new Singleton(); 4 } 5 return singleton; 6}
C#
1using System; 2using System.Threading; 3 4namespace Singleton 5{ 6 class Singleton 7 { 8 private static Singleton _Singleton = null; 9 10 private Singleton() { 11 Console.WriteLine("インスタンスを生成しました。"); 12 Slowdown(); 13 } 14 15 public static async Singleton getInstance() { //★★★ここをJavaコードと同等のもので置き換えたい 16 if (_Singleton == null) { 17 _Singleton = new Singleton(); 18 } 19 return _Singleton; 20 } 21 22 private void Slowdown() { 23 //3秒待機 24 Thread.Sleep(3000); 25 } 26 } 27}
回答2件
あなたの回答
tips
プレビュー