我有一些单元测试,我注意到了一些不寻常的行为,特别是在另一个测试创建winforms图表之后,异步调用似乎挂起了。深入挖掘,我可以通过一个非常简单的设置来复制它。 复制问题的代码如下:
private async Task ADelay()
{
await Task.Delay(1000);
}
private void PlayWithChart()
{
var chart = new Chart();
var stream = new MemoryStream();
chart.SaveImage(stream, ChartImageFormat.Jpeg);
stream.Position = 0;
chart.Dispose();
stream.Dispose();
}
[Test]
public async Task Chart_example1()
{
PlayWithChart();
var astring = await ADelay().ContinueWith(e => "123");
Assert.That(astring, Is.EqualTo("123"));
}
如果您运行上述测试,它将挂在" await"电话,测试中的第二行。
但是如果你注释掉" var chart = new Chart();"以及参考图表的其他行,然后测试通过。
所以我假设某些事情与Chart控件(来自winforms)的构造方式有关,使用线程上下文来解决这个问题。
有没有人遇到过这个或知道如何修复它?是在单独的STA线程上创建图表还是类似的东西?