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());
}
});
}
}