Добавьте файлы проекта.
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
using Android.Gms.Tasks;
|
||||
|
||||
namespace Massenger.Client;
|
||||
|
||||
internal static class AndroidTaskExtensions
|
||||
{
|
||||
public static Task<string?> AsStringAsync(this Android.Gms.Tasks.Task task, System.Threading.CancellationToken cancellationToken = default)
|
||||
{
|
||||
var taskCompletionSource = new TaskCompletionSource<string?>(TaskCreationOptions.RunContinuationsAsynchronously);
|
||||
if (cancellationToken.CanBeCanceled)
|
||||
{
|
||||
cancellationToken.Register(() => taskCompletionSource.TrySetCanceled(cancellationToken));
|
||||
}
|
||||
|
||||
task.AddOnCompleteListener(new TaskCompletionListener(taskCompletionSource));
|
||||
return taskCompletionSource.Task;
|
||||
}
|
||||
|
||||
private sealed class TaskCompletionListener(TaskCompletionSource<string?> taskCompletionSource)
|
||||
: Java.Lang.Object,
|
||||
IOnCompleteListener
|
||||
{
|
||||
public void OnComplete(Android.Gms.Tasks.Task task)
|
||||
{
|
||||
if (task.IsCanceled)
|
||||
{
|
||||
taskCompletionSource.TrySetCanceled();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!task.IsSuccessful)
|
||||
{
|
||||
taskCompletionSource.TrySetException(new InvalidOperationException(task.Exception?.Message ?? "Android task failed."));
|
||||
return;
|
||||
}
|
||||
|
||||
taskCompletionSource.TrySetResult(task.Result?.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user