mirror of
https://github.com/esiur/esiur-dotnet.git
synced 2025-05-06 19:42:58 +00:00
53 lines
1.1 KiB
C#
53 lines
1.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Runtime.CompilerServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Esyur.Core
|
|
{
|
|
public class AsyncAwaiter<T> : INotifyCompletion
|
|
{
|
|
Action callback = null;
|
|
|
|
AsyncException exception = null;
|
|
|
|
T result;
|
|
|
|
public AsyncAwaiter(AsyncReply<T> reply)
|
|
{
|
|
reply.Then(x =>
|
|
{
|
|
this.IsCompleted = true;
|
|
this.result = x;
|
|
this.callback?.Invoke();
|
|
}).Error(x =>
|
|
{
|
|
exception = x;
|
|
this.IsCompleted = true;
|
|
this.callback?.Invoke();
|
|
});
|
|
}
|
|
|
|
public T GetResult()
|
|
{
|
|
if (exception != null)
|
|
throw exception;
|
|
return result;
|
|
}
|
|
|
|
public bool IsCompleted { get; private set; }
|
|
|
|
public void OnCompleted(Action continuation)
|
|
{
|
|
if (IsCompleted)
|
|
continuation?.Invoke();
|
|
else
|
|
// Continue....
|
|
callback = continuation;
|
|
}
|
|
|
|
|
|
}
|
|
}
|