Вот какой -то код:
App.razor
window.Foo_JS = async function () {
var obj = {};
obj.message = "Hello from JS";
return await new Promise((resolve, reject) => {
resolve(JSON.stringify(obj));
});
}
main.razor
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using Microsoft.JSInterop.Implementation
@inject IJSRuntime JSR
@rendermode InteractiveServer
@page "/"
@code {
public string fromStandardMethod
{
get
{
string task = Task.Run(() =>
{
return StandardMethod().Result;
}).Result;
return task;
}
}
public string fromJSRInvokeAsync
{
get
{
string task = Task.Run(() =>
{
return JSRInvokeAsync().Result;
}).Result;
return task;
}
}
// Works fine
public async Task StandardMethod()
{
await Task.Delay(100);
return "Standard method";
}
// System.AggregateException: One or more errors occurred. (One or more errors
// occurred. (One or more errors occurred. (A task was canceled.)))
public async Task JSRInvokeAsync()
{
await Task.Delay(100);
return await JSR.InvokeAsync("window.Foo_JS");
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await JSR.InvokeVoidAsync("alert", fromStandardMethod);
await JSR.InvokeVoidAsync("alert", fromJSRInvokeAsync);
}
}
Я пытаюсь получить строку результата от ijsruntime.invokeasync () в «Getter», но что -то пошло не так. Когда я называю код без ijsruntime.invokeasync () , он работает нормально. Что я делаю неправильно и как это можно исправить в моем коде?Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111]
Unhandled exception in circuit 'TFxKutHcuL9njLexzxgn2hVjqwJMTGbg638hLfyACk8'.
System.AggregateException: One or more errors occurred. (One or more errors occurred. (A task was canceled.))
---> System.AggregateException: One or more errors occurred. (A task was canceled.)
---> System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Threading.Tasks.Task.GetExceptions(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
at Web.WorkSpace.Pages.Main.b__4_0() in C:\Users\Shadow\Desktop\Web\Web\WorkSpace\Pages\Main.razor:line 38
Подробнее здесь: https://stackoverflow.com/questions/797 ... nvokeasync