インスタンス化時に、System.Threading.AutoResetEventを介して作業が行われるのを待機するバックグラウンドスレッドを作成するクラスがあります。作業が利用可能になると、スレッドは汎用キューからオブジェクトをプルして作業し、終了時にオブジェクトからコールバックデリゲートを呼び出します。
ただし、詳細には悪魔がいます。その作業を行うには、スレッドがジェネリック関数を呼び出すため、スレッドがTypeを認識している必要があります。キュー内のオブジェクトを定義してジェネリックを受け入れることはできますが、本当にジェネリックなオブジェクトを受け入れるようにキューを定義するにはどうすればよいですか。つまり、そのタイプは何でもかまいません。バックグラウンドスレッドは、ジェネリック関数呼び出しに必要な型をどのように推測できますか?
サンプルコード:
class GenericItem<T>
{
// ... some code ...
}
// somewhere else in code
Queue<GenericItem> myGenericListofItemsToWorkOn;
明らかに、C#は具体的なタイプを指定しないようにしているので、最後の行が気に入らないので、次のことができます。
myGenericListofItemsToWorkOn.Enqueue( new GenericItem<string>() );
myGenericListofItemsToWorkOn.Enqueue( new GenericItem<int>() );
次に、私のスレッドは次のことを行う必要があります。
GenericItem obj = myGenericListofItemsToWorkOn.Dequeue(); // How can I reference a generic item here?
Library.Call<...>(...); // How can I infer the generic type of the item dequeued here?