【发布时间】:2010-08-09 02:48:06
【问题描述】:
我最近请一位开发人员使用 .NET 4.0 的新多线程功能编写一个库。
他做得很好,但我担心任务逻辑在整个代码中重复并且没有很好地封装。
我还担心这会在测试方面产生问题。通常,我通过创建一个接口和一个存根/模拟对象来运行我的测试,从而在代码中创建一个接缝来进行测试。
我想这是可能的使用这种做事方式。看起来生产代码逻辑与测试逻辑有很大不同。
解决方案是否也可以进行并行测试,并在其中重复任务逻辑?或者人们是否已经想到了可以封装大部分任务处理逻辑以便于复制的模式?
谢谢!
Task task = Task.Factory.StartNew(() =>
{
if(cancellationToken.IsCancellationRequested)
{
throw new OperationCanceledException();
}
if (_bookHeader.EncryptionType != 0)
{
throw new MobiException("The book is encrypted");
}
ExtractText();
partReady(66.66f);
}, cancellationToken);
Task opfTask = task.ContinueWith(antecedent =>
{
if (antecedent.Status != TaskStatus.Canceled)
{
OpfDocument opf = CreateOpf();
partReady(80);
MobiDocument book = new MobiDocument()
{
Contents = _mobiHtml,
Description = opf,
Header = _bookHeader,
Sections = _sections
};
Document = book;
GC.Collect();
partReady(100);
}
});
return opfTask;
}
【问题讨论】: