gpt4 book ai didi

c# - 等待任务不适用于 IEnumerable

转载 作者:太空宇宙 更新时间:2023-11-03 19:57:48 25 4
gpt4 key购买 nike

我正在尝试异步执行现有的同步方法,但是如果该方法是 IEnumerable,那么它似乎会跳过该方法。

这是我要实现的目标的简化版本。

public partial class MainWindow : Window
{
private IEnumerable<int> _Result;

public MainWindow()
{
InitializeComponent();

DoSomethingAmazing();
}

private async void DoSomethingAmazing()
{
_Result = await DoSomethingAsync();
}

private IEnumerable<int> DoSomething()
{
Debug.WriteLine("Doing something.");

//Do something crazy and yield return something useful.
yield return 10;
}

private async Task<IEnumerable<int>> DoSomethingAsync()
{
//Perform the DoSomething method asynchronously.
return await Task.Run(() => DoSomething());
}
}

本质上,当创建 MainWindow 时,它将触发一个异步方法来填充 _Result 字段。

现在 DoSomething 从未真正执行过。调试消息永远不会出现。

如果我将 IEnumerable 更改为 List,那么一切都很好。执行该方法并填充结果。

我想使用 IEnumerable 的主要原因是因为我想使用 yield return,这不完全是一个要求,但它主要只是一个偏好.我遇到了这个问题,从那以后我就一直在摸不着头脑。

最佳答案

运行 DoSomething 的结果方法是一个实现 IEnumerable<int> 的类并在您枚举代码时运行您的代码。您的问题与使用异步无关。如果你运行下面的代码

var result = DoSomething();
Debug.WriteLine("After running DoSomething");
var resultAsList = result.ToList();
Debug.WriteLine("After enumerating result");

你会得到这个输出。

After running DoSomething

Doing something.

After enumerating result

关于c# - 等待任务不适用于 IEnumerable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31588345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com