mirror of
https://github.com/dotnet/MQTTnet.git
synced 2026-10-15 08:33:01 +08:00
33 lines
756 B
C#
33 lines
756 B
C#
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace MQTTnet.Core.Internal
|
|
{
|
|
public class AsyncGate
|
|
{
|
|
private readonly Queue<TaskCompletionSource<bool>> _waitingTasks = new Queue<TaskCompletionSource<bool>>();
|
|
|
|
public Task WaitOneAsync()
|
|
{
|
|
var tcs = new TaskCompletionSource<bool>();
|
|
lock (_waitingTasks)
|
|
{
|
|
_waitingTasks.Enqueue(tcs);
|
|
}
|
|
|
|
return tcs.Task;
|
|
}
|
|
|
|
public void Set()
|
|
{
|
|
lock (_waitingTasks)
|
|
{
|
|
if (_waitingTasks.Count > 0)
|
|
{
|
|
_waitingTasks.Dequeue().SetResult(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|