Ошибка запуска Blazor: System.Threading.SynchronizationLockException: не может ждать на мониторах в этой среде выполнения - PullRequest
0 голосов
/ 02 августа 2020
• 1000 в заголовке.

Это можно воспроизвести, вызвав этот метод в программе. cs

  private static void CalApi()
    {
        try
        {
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(@"https://dummy.restapiexample.com/api/v1/employees");
            string path = "ididcontent.json";
            string response = httpClient.GetStringAsync(path)?.Result;
            Console.WriteLine(response);
        }
        catch(Exception ex)
        {
            Console.WriteLine("Error getting api response: " + ex);
        }

    }

Ответы [ 2 ]

2 голосов
/ 02 августа 2020

В Program.cs

 public static async Task Main(string[] args)
 {

    ......

    builder.Services.AddSingleton<SomeService>();

    var host = builder.Build();       

    ...

вызовите здесь свой код, но используйте await

    var httpClient = host.Services.GetRequiredService<HttpClient>();
    string response = await httpClient.GetStringAsync(path);
    ...

    var someService = host.Services.GetRequiredService<SomeService>();
    someService.SomeProperty = response;

    await host.RunAsync();
1 голос
/ 02 августа 2020

Избегайте .Result, это может легко попасть в тупик. Вы получаете эту ошибку, потому что механизм не поддерживается (не может поддерживаться) в однопоточной веб-сборке. Я бы считал это особенностью. Если бы он мог ждать на мониторе, он бы завис.

...