Я пытаюсь обернуть как отправку, так и получение данных на сервер с использованием шаблона async/await. То, что я создал, представляет собой среду сокетов, управляемую событиями, которая запускает события всякий раз, когда данные принимаются с сервера. Тем не менее, у меня возникли проблемы с попыткой выяснить, как ждать потока после отправки, чтобы я не возвращался до тех пор, пока данные с сервера не вернутся.Async/Await Отправка и получение данных сети
В прошлом я использовал ручное событие сброса для достижения этой цели ...
byte[] returnData;
public byte[] SendData(byte[] data){
socket.Send(data, 0, data.Length);
manualResetEvent.Wait();
return returnData;
}
public void OnDataReceived(byte[] serverData){
returnData = serverData;
manualResetEvent.Set();
}
Этого метод просто останавливает поток абонента, пока событие сброса не срабатывают. Это нехорошо, так как я хочу шаблон async/await, чтобы вызывающий поток мог выполнять другую работу, ожидая данных с сервера.
То, что я сейчас ....
byte[] returnData;
public async Task<byte[]> SendData(byte[] data){
await socket.SendAsync(data, 0, data.Length);
//await something that frees up this thread to do other work
return returnData;
}
public void OnDataReceived(byte[] serverData){
returnData = serverData;
//do something that pushes SendData back into the active context
}
Я думаю, что я делаю неправильно somethign. Любая помощь будет оценена!
Где код, который вызывает событие, которое обрабатывается 'OnDataReceived'? –