他のモジュール(非同期タイプのインスタンスが明示的に必要な他のタイプのみをブロックする)をブロックせずにクラスを非同期で初期化できるようにUnityを設定するにはどうすればよいですか?私が考えているクラスの種類は、データベースから頻繁に使用されるデータのスナップショットをプルする参照データキャッシュであり、他のモジュールにアクセスさせる前にプリキャッシュを完了する必要があります(要求がクラスIメインスレッドをすばやく保持し、他のすべてのモジュールの初期化をブロックします)。私は複数のこのような参照データクラスの例としてタイプ/モジュールの非同期初期化のためのUnityの設定方法
を持っているので、これはより重要になり、私はこのようなクラスを持っていると言う:
public class ProductCache{
public ProductCache(){}
public Initialize(){
// a very slow DB call to fetch frequently used products
Thread.Sleep(30*1000);
}
public Product FindProduct(string productDescription){
/* check cache, if not there try the db */
}
}
私は、コンストラクタから初期化を呼び出す場合、私はそれを呼び出したスレッドをブロックします(Unityから)30秒間、他の(似たような)クラスを並行して作成することができなくなりました。私が単にスレッドプールにタスクを置くと、最終的に私のプロダクトキャッシュを必要とする別のクラスが初期化コードを実行していて、まだ完全には初期化されていないデータ構造にアクセスすることになります(この場合、キャッシュミスにとDBの呼び出し特定の製品をフェッチすると、30秒で多くのそのような要望がある場合があります)
おかげ オスカー
初期化するクラスの構造はいくつかありますか? – onof
小さな例を追加 – Oskar