我对使用声明有些怀疑:
我有一个叫做的课
MyJob是一次性的.然后我在MyJob JobResults上也有一个属性也是Disposable.
我的代码:
using (MyJob job = new MyJob())
{
//do something.
FormatResults(job.JobResults)
}
public string FormatResuls(JobResuts results)
{
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:在这种情况下,使用块是MyJob和MyJob.Results处理或只有MyJob和NOT MyJob.Results?
我也在C#中执行wrt任务的并行处理:
Tasks allTasks = List<Tasks>
try
{
foreach(Task t in allTasks)
{
// Each tasks makes use of an IDisposable object.
t.Start();
}
Task.WaitAll(allTasks);
}
catch(AggregateExecption aex)
{
/// How do I ensure that all IDisposables are disposed properly if an exception happens in any of the tasks?
}
Run Code Online (Sandbox Code Playgroud)
我的第二个问题,在上面的代码中,在处理任务中的异常时,确保正确处理对象的正确方法是什么?
对不起,如果我的问题太天真或令人困惑,因为我仍在努力学习和理解C#.多谢你们!
是MyJob和MyJob.Results处理或只有MyJob和NOT MyJob.Results?
这对于您的Dispose方法的实现是主观的.由于我们在您的问题中没有看到它,我会假设您目前没有处置您的Result财产MyJob.Dispose,因此它将是后者.
由于只MyJob包含在一个using声明中,并再次假设它对你的Result财产没有任何作用,它将被处置而Results不是包含在using声明中.
您可以决定MyJob,因为它封装了您的Result财产,也负责一次性使用它.如果你决定的话,你可以配置Results在MyJobs.Dispose.
在处理任务中的异常时,确保正确处理对象的正确方法是什么?
如果传递给它的委托Task包含在一个using语句中,那么你是安全的,因为using将代码转换为一个try-finally块,如果块中发生异常using,该finally块仍然会运行yourObject.Dispose.
| 归档时间: |
|
| 查看次数: |
508 次 |
| 最近记录: |