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);
    }
    }
    }
    }
  • 相关阅读:
    Javascript的私有变量和方法、共有变量和方法以及特权方法、构造器、静态共有属性和静态共有方法
    Spring4整合Hibernate4出现的错误的解决
    Javascript类的创建
    Kettle学习总结(一)
    Kettle Excel导入数据到数据库
    Python 爬虫 2 (转)
    Js仿腾讯微博效果
    飘雪效果
    列表获取对应图片
    飞入购物车
  • 原文地址:https://www.cnblogs.com/zeroone/p/3737417.html
Copyright © 2011-2022 走看看