Func <Task>不引发其他任务的异常

时间:2019-07-25 09:23:05

标签: c# .net unit-testing task multitasking

运行返回带有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中进行了搜索。也许这是重复的,但我还没有找到其他类似的问题。

谢谢。

1 个答案:

答案 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