将 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
}
}