#c# #asp.net-core #events #blazor
#c# #asp.net-core #Мероприятия #blazor
Вопрос:
Мне трудно понять, как я могу подписаться на событие на странице Blazor.
У меня есть этот класс, который реализует IJobListener
.NET-интерфейс Quartz:
public class GlobalJobListener : IJobListener
{
public event TaskExecution Started;
public event TaskExecution Vetoed;
public event TaskExecutionComplete Executed;
public GlobalJobListener(string name)
{
Name = name;
}
public GlobalJobListener()
{
}
public Task JobToBeExecuted(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
{
var task = new Task(() => Started?.Invoke());
task.Start();
task.Wait();
return task;
}
public Task JobExecutionVetoed(IJobExecutionContext context, CancellationToken cancellationToken = default(CancellationToken))
{
var task = new Task(() => Vetoed?.Invoke());
task.Start();
task.Wait();
return task;
}
public Task JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException, CancellationToken cancellationToken = default(CancellationToken))
{
var task = new Task(() => Executed?.Invoke(jobException));
task.Start();
task.Wait();
return task;
}
public string Name { get; }
}
В ConfigureServices
:
services.AddScoped<GlobalJobListener>();
Затем на странице my .razor:
[Inject]
protected GlobalJobListener listener { get; set; }
И OnInitializedAsync()
:
protected override async Task OnInitializedAsync()
{
scheduler = quartz.Scheduler;
if (scheduler != null)
{
listener.Started = BeforeStart;
listener.Executed = AfterEndAsync;
}
}
private void BeforeStart()
{
Log.Information("t" "Started: " DateTime.Now.ToString("dd-MMM-yyyy hh:mm:ss tt"));
}
И BeforeStart()
никогда не срабатывает, но JobToBeExecuted()
срабатывает нормально. Я не могу понять, что я делаю неправильно.
Большое спасибо.
Комментарии:
1. Что на самом деле запускает любую «работу»? Вы подключаете событие в методе асинхронного запуска, так может быть, событие сработало до того, как эта связь действительно произошла?
2. Попробуйте использовать «private Task BeforeStart ()» вместо «private void BeforeStart ()» и сделайте так, чтобы ваш метод возвращал Task. Выполненная задача