Есть у меня promise метод чтения данных из моего потока:
public void ReadAsync<T>(AsyncReadCallback<T> callback, AsyncException exception = null) {
try {
Thread thread = new Thread(new ThreadStart(() => {
try {
T request = ReadSync<T>();
callback.Invoke(ref request);
} catch(Exception e) {
if(exception == null) {
throw e;
}
exception.Invoke(e);
}
}));
thread.Start();
} catch (Exception e) {
if(exception == null) {
throw e;
}
exception.Invoke(e);
}
}
Вызывать я его могу, соответственно так:
stream.ReadAsync((string result) => {
Console.WriteLine("receive: "+result);
},(Exception e) => {
Console.WriteLine("exception: "+e.Message);
});
Но, в погоне за сахаром, решил попробовать сделать аналогичное поведение через async, что даст возможность выполнять всё без потоков, более того, заставлять делать await в нужных мне местах:
public async Task<T> ReadAsync<T>() {
return ReadSync<T>();
}
Вызывать планирую, примерно так:
Task<string> taskRead = stream.ReadAsync<string>();
...
string data = await taskRead;
Console.WriteLine(data);
Однако, VS2017 говорит, что мой код будет выполняться только синхронно, и что там нет await. Я не могу понять, возможно ли вообще то что я задумал?
Вот что говорит сама студия (скрин очень неудобный):
Всё что я хочу - выполнять синхронный метод так, как если бы он был асинхронен. (Возможно, звучит глупо, но, не могу сформулировать по другому)
asyncиспользуется в тех методах, внутри которых естьawait. В вашем методеReadAsyncawait'ов нет – tym32167 Jan 19 '18 at 11:58