Ryujinx/Ryujinx.HLE/HOS/Services/Account/Acc/AsyncContext/AsyncExecution.cs

56 lines
1.4 KiB
C#
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

using Ryujinx.Common.Logging;
using Ryujinx.HLE.HOS.Kernel.Threading;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace Ryujinx.HLE.HOS.Services.Account.Acc.AsyncContext
{
class AsyncExecution
{
private readonly CancellationTokenSource _tokenSource;
private readonly CancellationToken _token;
public KEvent SystemEvent { get; }
public bool IsInitialized { get; private set; }
public bool IsRunning { get; private set; }
public AsyncExecution(KEvent asyncEvent)
{
SystemEvent = asyncEvent;
_tokenSource = new CancellationTokenSource();
_token = _tokenSource.Token;
}
public void Initialize(int timeout, Func<CancellationToken, Task> taskAsync)
{
Task.Run(async () =>
{
IsRunning = true;
_tokenSource.CancelAfter(timeout);
try
{
await taskAsync(_token);
}
catch (Exception ex)
{
Logger.Warning?.Print(LogClass.ServiceAcc, $"Exception: {ex.Message}");
}
SystemEvent.ReadableEvent.Signal();
IsRunning = false;
}, _token);
IsInitialized = true;
}
public void Cancel()
{
_tokenSource.Cancel();
}
}
}