Starten Sie die Longrunning -Hintergrundaufgabe von .NET GRPC InterceptorC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Starten Sie die Longrunning -Hintergrundaufgabe von .NET GRPC Interceptor

Post by Anonymous »

Ich arbeite an einer ASP.NET -Kernanwendung, die einige GRPC -Methoden enthüllt. Hintergrund.public class MyInterceptor : Interceptor
{
public readonly TimeSpan TimeOut = TimeSpan.FromSeconds(10);

public override async Task UnaryServerHandler(TRequest request, ServerCallContext context, UnaryServerMethod continuation)
{
Task resultTask = this.TryGetCompletedResult(() => continuation(request, context));

if (resultTask.IsCompleted)
{
return await resultTask;
}

var id = Guid.NewGuid();
_ = resultTask.ContinueWith(t => this.SendCompletedEventAsync(id, t));
throw new RpcException(new Status(StatusCode.Cancelled, $"ACCEPTED-{id}"));
}

private Task TryGetCompletedResult(Func func)
{
var resultTask = Task.Run(func);
resultTask.Wait(this.TimeOut);
return resultTask;
}

private async Task SendCompletedEventAsync(Guid id, Task task)
{
Console.WriteLine($"{id} completed! Status: {task.Status}");

try
{
await task;
}
catch (Exception x)
{
Console.WriteLine($"Error: {x.Message}");
}
}
}
< /code>
(Der Code ist natürlich vereinfacht, um besser anzuzeigen, was passiert) < /p>
Wenn eine Fortsetzung weniger als die Zeitüberschreitung dauert, funktioniert alles wie erwartet. />Grpc.aspnetcore.server.ServercallHandler-Fehlerstatuscode 'Storniert' mit Detail 'Accepted-A0584EDA-9BB9-4E0D-B57D-944222BFB9F9F06' erhöht. vom Typ ObjectDisposedException mit der Nachricht: < /p>

"Fehler: Die iFeatureCollection wurde entsorgt. Objektname: 'Sammlung'. Rpcexception (neuer Status (StatusCode.Cancelled, $ "Accepted- {id}");>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post