У меня есть следующий псевдокод в стиле клиент-сервер:
public void GetGrades() {
var msg = new Message(...); // request in here
QueueRequest?.Invoke(this, msg); // add to outgoing queue
}
В другом классе процессоров у меня есть цикл:
// check for messages back from server
// server response could be a "wait", if so, wait for real response
// raise MessageReceived event here
// each message is then processed by classes which catch the event
// send new messages to server
if (queue.Any()){
var msg = queue.Dequeue();
// send to server over HTTP
}
Я сильно упростил этот код, поэтому цель моего вопроса легко понять.
В настоящее время я называю этот код так:
student.GetGrades(); // fire and forget, almost
Но у меня есть далеко не идеальный способ узнать, когда возвращается результат, я в основном использую события:
Я поднимаю MessageReceived?.Invoke(this, msg);
, затем ловлю это на другом уровне StudentManager
, который устанавливает результат для конкретного объекта учащегося.
Но вместо этого я хотел бы обернуть это в async await
и получить что-то вроде этого:
var grades = await GetGrades();
Возможно ли это в таких отключенных сценариях? Как мне это сделать?