Как реализовать ожидание готовности выполнения метода без использования цикла while?
Если я правильно понимаю, обработчик сообщений от websocket'а у вас крутится где-то в другом месте. Вы можете создать общий TaskCompletionSource и в методе Run вызвать await tcs.Task;, а при приходе сообщения по сокету вызывать tcs.SetResult();.
Websocket может послать ваше сообщение частями и в любом случае вам придется делать while до получения состояния EndOfMessage == true.