运行返回带有Func的Task的方法时,该方法会引发异常,但运行Func时不会引发异常。
//This doesnt throw:
Func<Task> runGetSimilarity16Times = () => TaskHelper.Run(getSimilarity, times: 16);
await runGetSimilarity16Times();
//This throws:
await TaskHelper.Run(getSimilarity, times: 16);
//TaskHelper.Run code:
public static Task Run(Action action, int times)
{
var tasks = new List<Task>();
for (int index = 0; index < times; index++)
{
tasks.Add(new Task(action));
}
tasks.ForEach(task => task.Start());
return Task.WhenAll(tasks);
}
复制的更新:我认为这不是重复的问题,因为我正在等待任务并且正在使用Func。在发布之前,我已经在Google和StackOverflow中进行了搜索。也许这是重复的,但我还没有找到其他类似的问题。
谢谢。
答案 0 :(得分:0)
首先,感谢您的回答和帮助。
我终于找到了问题。方法“ getSimilarity”仅在某些时候失败,我不得不多次运行它。我放了1024:
[Test]
public async Task Given_TwoWords_When_GetSimilarity_WithMultipleThreads_Then_NoException()
{
//Given
const string word1 = "word1";
const string word2 = "word2";
//When
Action getSimilarity = () => distancias.BlockDistance.GetSimilarity(word1, word2);
//(1024 times because race conditions, this makes it fail)
Func<Task> runGetSimilarity = () => TaskHelper.Run(getSimilarity, times: 1024);
//Then
await runGetSimilarity.Should().NotThrowAsync();
}
现在它总是失败,不仅是当我不包装TaskHelper.Run到Func中时。 (我修复了代码,现在它可以与多个线程一起工作,并且断言不会抛出异常)
对我来说,现在解决了。
很抱歉问题中的信息不完整。
再次感谢:D