@using Microsoft.AspNetCore.Components.Web
@using Microsoft.JSInterop
@implements IDisposable
@inject IJSRuntime JS
Execution Context Test
Context:
@(IsWasm ? "WASM (Client)" : "Server")
Time: @CurrentTime.ToLongTimeString()
@lblOut
@code {
bool IsWasm;
DateTime CurrentTime = DateTime.Now;
private CancellationTokenSource? _cts;
private string lblOut = "";
protected override void OnInitialized()
{
IsWasm = OperatingSystem.IsBrowser();
_cts = new CancellationTokenSource();
// avvia loop asincrono che funziona sia in server che in WASM
_ = TimeLoopAsync(_cts.Token);
}
private async Task TimeLoopAsync(CancellationToken token)
{
try
{
while (!token.IsCancellationRequested)
{
CurrentTime = DateTime.Now;
await InvokeAsync(StateHasChanged);
await Task.Delay(1000, token);
}
}
catch (TaskCanceledException) { }
}
private Task DoClick()
{
lblOut = $"Clicked | {DateTime.Now:HH:mm:ss}";
// log su console browser se siamo in WASM
if (IsWasm)
_ = JS.InvokeVoidAsync("console.log", $"ExecutionContextTest DoClick at {DateTime.Now}");
return Task.CompletedTask;
}
public void Dispose()
{
_cts?.Cancel();
_cts?.Dispose();
}
}