AVQueryExtension

https://leancloud.cn/

using System.Collections.Generic;
using AVOSCloud;
using System.Threading.Tasks;
using System;

public static class AVQueryExtension
{
    private static Queue> findQueue = new Queue>();
    private static Dictionary, Action>>> queryActions = new Dictionary, Action>>>();

    private static Queue> countQueue = new Queue>();
    private static Dictionary, Action>> countActions = new Dictionary, Action>>();

    public static void FindAsync(this AVQuery query, Action>> continuation)
    {
        lock (queryActions)
        {
            queryActions[query] = continuation;
        }

        lock (findQueue)
        {
            if (findQueue.Count == 0)
                Find(query);
            else
                findQueue.Enqueue(query);
        }
    }

    private static void Find(AVQuery query)
    {
        query.FindAsync().ContinueWith(delegate (Task> task)
        {
            lock (queryActions)
            {
                var continuation = queryActions[query];
                if (continuation != null)
                    continuation(task);
                queryActions.Remove(query);
            }

            lock (findQueue)
            {
                if (findQueue.Count != 0)
                    Find(findQueue.Dequeue());
            }
        });
    }

    public static void CountAsync(this AVQuery query, Action> continuation)
    {
        lock (countActions)
        {
            countActions[query] = continuation;
        }

        lock (countQueue)
        {
            if (countQueue.Count == 0)
                Find(query);
            else
                countQueue.Enqueue(query);
        }
    }

    private static void Count(AVQuery query)
    {
        query.CountAsync().ContinueWith(delegate (Task task)
        {
            lock (countActions)
            {
                var continuation = countActions[query];
                if (continuation != null)
                    continuation(task);
                countActions.Remove(query);
            }

            lock (countQueue)
            {
                if (countQueue.Count != 0)
                    Find(countQueue.Dequeue());
            }
        });
    }
}

你可能感兴趣的:(AVQueryExtension)