@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(); } }