azz*_*123 4 c# events asynchronous blazor .net-5
我目前正在开发 .net 5 Blazor 应用程序。
我使用事件将数据从一个组件传递到另一个组件。
不幸的是,我当前的逻辑是同步的 - 但我宁愿使用异步事件处理程序。
因此,我需要使用以下代码来处理我的事件:
Task.Run(async () => await ChangeNumbers());
Run Code Online (Sandbox Code Playgroud)
是否可以在没有 Task.Run 的情况下异步处理事件?
public class MyComponentState
{
public int MyNumber { get; set; }
// Is there a way to declare this event Action async??
public event Action OnChange;
public void DoStuff(int myNumber)
{
MyNumber = myNumber;
NotifyStateChanged();
}
private void NotifyStateChanged() => OnChange?.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
public class MyOtherComponentDisplay : ComponentBase, IDisposable
{
[Inject]
public MyComponentState MyComponentState { get; set; }
protected override void OnInitialized()
{
// this should all be handled async... i could use OnInitializedAsync
MyComponentState.OnChange += OnChangeHandler;
}
private void OnChangeHandler()
{
// Is there a way to handle/declare this without Task.Run(async ...) - but async right away??
Task.Run(async () => await ChangeNumbers());
}
private async Task ChangeNumbers()
{
// Some operations with MyComponentState.MyNumber async needed!!!
StateHasChanged();
}
public void Dispose()
{
MyComponentState.OnChange -= OnChangeHandler;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法异步声明和处理事件?
你知道如何解决这个问题吗?
基本的采用是一个async void
处理程序:
private async void OnChangeHandler()
{
// Is there a way to handle/declare this without Task.Run(async ...)
// - but async right away??
// Task.Run(async () => await ChangeNumbers());
await ChangeNumbers();
await InvokeAsync(StateHasChanged); // probably needed
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6234 次 |
最近记录: |