在C#中使用语句用法

the*_*One 8 c#

我对使用声明有些怀疑:

我有一个叫做的课

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#.多谢你们!

Yuv*_*kov 5

是MyJob和MyJob.Results处理或只有MyJob和NOT MyJob.Results?

这对于您的Dispose方法的实现是主观的.由于我们在您的问题中没有看到它,我会假设您目前没有处置您的Result财产MyJob.Dispose,因此它将是后者.

由于只MyJob包含在一个using声明中,并再次假设它对你的Result财产没有任何作用,它将被处置而Results不是包含在using声明中.

您可以决定MyJob,因为它封装了您的Result财产,也负责一次性使用它.如果你决定的话,你可以配置ResultsMyJobs.Dispose.

在处理任务中的异常时,确保正确处理对象的正确方法是什么?

如果传递给它的委托Task包含在一个using语句中,那么你是安全的,因为using将代码转换为一个try-finally块,如果块中发生异常using,该finally块仍然会运行yourObject.Dispose.