【发布时间】:2021-04-11 11:45:26
【问题描述】:
我正在关注本教程:https://codewithmukesh.com/blog/authentication-in-blazor-webassembly/ 里面的所有方法都是异步的。重点是什么?异步不会导致创建任何新线程,所以它都是单线程异步的。那么它真的有什么帮助呢?如果是同步的,行为会发生什么变化?
例子:
public class AuthService : IAuthService
{
private readonly HttpClient _httpClient;
public AuthService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<CurrentUser> CurrentUserInfo()
{
var result = await _httpClient.GetFromJsonAsync<CurrentUser>("api/auth/currentuserinfo");
return result;
}
public async Task Login(LoginRequest loginRequest)
{
var result = await _httpClient.PostAsJsonAsync("api/auth/login", loginRequest);
if (result.StatusCode == System.Net.HttpStatusCode.BadRequest) throw new Exception(await result.Content.ReadAsStringAsync());
result.EnsureSuccessStatusCode();
}
public async Task Logout()
{
var result = await _httpClient.PostAsync("api/auth/logout", null);
result.EnsureSuccessStatusCode();
}
public async Task Register(RegisterRequest registerRequest)
{
var result = await _httpClient.PostAsJsonAsync("api/auth/register", registerRequest);
if (result.StatusCode == System.Net.HttpStatusCode.BadRequest) throw new Exception(await result.Content.ReadAsStringAsync());
result.EnsureSuccessStatusCode();
}
}
【问题讨论】:
-
看看asynchronous programming是什么。 “异步”和“并发/并行”不是一回事。
-
@Xerillio 我知道,这就是我要问的原因。如果会有并发,那么我明白为什么它会更快。
-
正如@Mike 在他的回答中指出的那样,有很多关于这个主题的教程等 - 即使是关于 SO。你看过一些吗?您难以掌握哪些部位?简而言之,使用
await可以释放当前线程来做一些其他工作,同时等待异步工作完成。 -
@Xerillio 好的,但是它如何决定接下来要做什么,执行哪部分代码?
标签: .net asp.net-core asynchronous