zoukankan      html  css  js  c++  java
  • AsyncEnumerableExtensions.cs z

    public static class Extensions
    {
    public static async Task ForEachAsync<T, U>(this IEnumerable<T> collection, Func<T, Task<U>> body, IObserver<U> observer = null)
    {
    foreach (var item in collection)
    {
    var res = await body(item);
    if (null != observer)
    {
    observer.OnNext(res);
    }
    }
    }
     
    public static async Task ForEachAsyncPerformance<T, U>(this IEnumerable<T> collection, Func<T, Task<U>> body, IObserver<U> observer = null)
    {
    var enumerator = collection.GetEnumerator();
     
    Task<U> task = null;
    if (enumerator.MoveNext())
    {
    task = body(enumerator.Current);
    }
    while (enumerator.MoveNext())
    {
    var item = enumerator.Current;
    var res = await task;
    task = body(item);
    if (null != observer)
    {
    observer.OnNext(res);
    }
    }
    if (null != task)
    {
    var res = await task;
    if (null != observer)
    {
    observer.OnNext(res);
    }
    }
    }
     
    public static async Task ForEachAsync<T, U>(this IEnumerable<T> collection, int parallelism, Func<T, Task<U>> body, IObserver<U> observer = null)
    {
    int inFlight = 0;
    var tasks = new HashSet<Task<U>>();
     
    foreach (var item in collection)
    {
    if (inFlight >= parallelism)
    {
    var task = await Task.WhenAny(tasks);
    tasks.Remove(task);
    inFlight--;
    if (null != observer)
    {
    observer.OnNext(task.Result);
    }
    }
     
    inFlight++;
    tasks.Add(body(item));
    }
     
    while (inFlight > 0)
    {
    var task = await Task.WhenAny(tasks);
    tasks.Remove(task);
    inFlight--;
    if (null != observer)
    {
    observer.OnNext(task.Result);
    }
    }
    }
    }
  • 相关阅读:
    使用VisualStudio2015开发QT项目
    界面控件
    SmartGit 试用过期
    视图和模型变换
    模型变换和视图变换
    一元二次方程
    论cudnn与cuda之间的关系,和实际例子测试。
    在Ubuntu 18.04上安装Tensorflow
    ubuntu14.04安装CUDA8.0
    Windows10系统远程桌面连接出现卡顿如何解决
  • 原文地址:https://www.cnblogs.com/zeroone/p/3737417.html
Copyright © 2011-2022 走看看