IDisposableをパラメーターとしてメソッドに渡し、そのメソッド内に配置することをお勧めしますか。複数のスレッドを使用する必要がある場合、これは一種の避けられないことです。ベストプラクティスでは、所有者(発信者)がそれを破棄する必要があるとされています。
例えば
public void MyMethod(MyClass reader){
using(reader){
//some code
}
}
所有者(スレッドを作成している)がもう存在しない場合はどうなりますか?例えば
interface IReader : IDisposable {
string Read();
}
public class MyReader : IReader {
public string Read()
{
return "hellow world";
}
public void Dispose()
{
//dispose code
}
}
ここに問題があります...
public void Start() {
MyReader[] readerSet = new MyReader[5];
for (int i = 0; i < readerSet.Length; i++) {
readerSet[i] = new MyReader();
}
foreach (IReader reader in readerSet) {
ThreadPool.QueueUserWorkItem(new WaitCallback(Run), reader);
}
//exit after creating threads
}
public void Run(Object objReader) {
IReader reader = (IReader)objReader;
using (reader) {
//use the reader
}
}