Рекомендуется ли передавать 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
}
}