C#获取异步列表错误

时间:2016-06-23 19:54:07

标签: c# asynchronous async-await task

查看以下编辑问题

我有以下问题。

我收到来自组件的通知事件我无法更改电话:

Subject.Save();

我的代码有一个事件处理程序来捕获在组件中触发的通知事件。 事件处理程序已正确注册。

我收到的通知带有事件来源和SomeEventArgs args。

SomeEventArgs向我提供了包含我需要的ID的数据。像

这样的东西
private void myEventHandler(object source, SomeEventArgs e)
{
   string path = e.getData().getPath();
   ...
   ...
   ShowDisplay();  //display shows a form with the path in a grid
}

当我保存一个主题时,我有一个通知,并且从SomeEventArgs我可以得到 我需要的道路。所以这很好。

问题在于我想保存多个科目。对于每个主题的Save(),myEventHandler最终会被触发,我将获得如上所述的路径。

问题在于我不想为每个主题调用ShowDisplay(),而是立即为所有主题调用myEventHandler。所以,如果我有10个主题,我想首先接收10个路径,然后全部显示它们 由ShowDisplay()打开的单个表单中的10个。因此,无法从List<string> productNames = GetProductNamesAsync(); 调用ShowDisplay,因为该事件仅处理单个主题的通知。

我想有一个全局列表,并用每个通知的路径填充它,但是引入了全局变量,而且我不知道列表何时填满了所有10个路径。它似乎不是一个优雅的想法。

已编辑的问题 我正在调用异步方法来获取像

这样的产品的名称
public async Task<List<string>> GetProductNamesAsync()
{
  return await Task.Run(() => subject.GetList());
}

我的异步方法如下:

System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

这会返回错误 不能隐含地将类型System.Collections.Generic.List<string>转换为var string = `As all string substitutions in Template Strings are JavaScript expressions, we can substitute a lot more than variable names. For example, below we can use expression interpolation to embed for some readable inline math:` console.log(string);

1 个答案:

答案 0 :(得分:0)

List<string> productNames = await GetProductNamesAsync();需要List<string> productNames = await Task.Run(() => GetProductNames());,但是你真的不应该为同步函数创建异步包装器。做{{1}}

要好得多