c#并行获取和处理数据

时间:2017-06-28 00:38:36

标签: c#

我不知道我是否真的很好地描述了问题标题,但这就是我想要的。

我有一个方法可以从网上返回一些数据并将其添加到List。

public List<info> infos()
{
   List<info> datas = new List<info>();
   foreach(//)
   {
     1) // send Api Request 
     2) // getting Data 
     3) // Added it to the List 
   }
   return datas;
}

我的GUI中有一个ListView,我希望能够添加从api中检索到的信息并逐个添加到列表中而不是返回整个列表,因为 IT需要长时间加载< / strong>

1 个答案:

答案 0 :(得分:0)

使用Microsoft的Reactive Framework(NuGet“System.Reactive”)。

然后你可以这样做:

public IObservable<info> infos()
{
    return
        from n in Observable.Range(0, 100)
        from i in Observable.FromAsync(() => ApiRequestInfo(n))
        select i;
}

public Task<info> ApiRequestInfo(int index)
{
    // implement your actual API call here.
    return Task.Factory.StartNew(() => new info() { Index = index });
}

public class info
{
    public int Index;
}

现在,要使用数据,请执行以下操作:

IDisposable subscription =
    infos()
        .ObserveOn(this) // WinForm: `this` is form
        .ObserveOnDispatcher() // WPF
        .Subscribe(i =>
        {
            /* use `i` in your UI */
        });

您需要选择.ObserveOn(this).ObserveOnDispatcher(),具体取决于您的用户界面。

此代码将为您执行所有线程编组。