Пишу сайт и код который выполняется асинхронно выполняется с задержкой, с первого раза он как будто не выполняется, а последующие разы он выполняется с задержкой до другого вызова метода
Технологии: SignalR, ASP.NET, Blazor WASM, MongoDB
AuthHub.cs на стороне сервера
using Microsoft.AspNetCore.SignalR;
using MongoDB.Driver;
using MongoDB.Bson;
using RayLight.Shared;
namespace RayLight.Server.Hubs;
public class AuthHub : Hub
{
public async Task Registration(RegistrationData data)
{
string sender = this.Context.ConnectionId;
IMongoDatabase db = Program.MongoClient.GetDatabase("Test1");
// await db.CreateCollectionAsync("Users");
IMongoCollection<User> Users = db.GetCollection<User>("Users");
FilterDefinition<User> filter_login = Builders<User>.Filter.Eq(c => c.Login, data.Login);
FilterDefinition<User> filter_email = Builders<User>.Filter.Eq(c => c.Email, data.Email);
long result_find_login = Users.Find<User>(filter_login).CountDocuments();
long result_find_email = Users.Find<User>(filter_email).CountDocuments();
if (result_find_email > 0)
{
Console.WriteLine("Юзер с такой почтой зарегистрирован уже");
await this.Clients.Caller.SendAsync("RegistrationError");
}
else if (result_find_login > 0)
{
Console.WriteLine("Юзер с таким логином зарегистрирован уже");
await this.Clients.Caller.SendAsync("RegistrationError");
}
else
{
User new_user = new User()
{
Login = data.Login,
Email = data.Email,
Password = data.Password
};
await Users.InsertOneAsync(new_user);
await this.Clients.Caller.SendAsync("RegistrationComplete");
Console.WriteLine("Юзер зарегестрирован");
}
}
}
Registration.razor на стороне браузера
@page "/registration"
@using Microsoft.AspNetCore.SignalR.Client
@using RayLight.Shared
@inject NavigationManager Navigation
@implements IAsyncDisposable
<div>@Notify</div>
<hr>
<input @bind="Login" type="text" name="login" placeholder="Login">
<input @bind="Email" type="email" name="email" placeholder="Email">
<input @bind="Password" type="password" name="password" placeholder="Password">
<hr>
<button @onclick="Registry">Registration</button>
@code
{
private HubConnection? AuthHub;
private string? Login { get; set; }
private string? Email { get; set; }
private string? Password { get; set;}
private string? Notify { get; set; }
protected override async Task OnInitializedAsync()
{
AuthHub = new HubConnectionBuilder()
.WithUrl(Navigation.ToAbsoluteUri("/AuthHub"))
.Build();
AuthHub.On("RegistrationComplete", () =>
{
this.Notify = "Registration Complete";
});
AuthHub.On("RegistrationError", () =>
{
this.Notify = "Registration Error";
});
await AuthHub.StartAsync();
}
private async Task Registry()
{
if (AuthHub is not null)
{
RegistrationData data = new RegistrationData()
{
Login = this.Login,
Email = this.Email,
Password = this.Password
};
@* await hubConnection.SendAsync("SendMessage", userInput, messageInput); *@
await AuthHub.SendAsync("Registration", data);
}
}
public async ValueTask DisposeAsync()
{
if (AuthHub is not null)
{
await AuthHub.DisposeAsync();
}
}
}
задержка по типу выполняешь функцию а оно показывает результат который происходил при выполнении функции в прошлый раз, ну это только через SignalR, а вот в консоли нормально все происходит