У меня есть этот метод:
public object LongRunningTask()
{
return SomethingThatTakesTooLong();
}
Я написал следующий код, чтобы я мог преобразовать обычный метод в асинхронный и все равно получить Exception
:
public async Task<object> LongRunningTaskAsync()
{
Exception ex = null;
object ret = await Task.Run(() =>
{
object r = null;
try
{
//The actual body of the method
r = SomethingThatTakesTooLong();
}
catch (Exception e)
{
ex = e;
}
return r;
});
if (ex == null)
return ret;
else
throw ex;
}
Когда мне нужно сделать это несколькими способами, я должен скопировать весь этот код и изменить только середину.
Есть ли способ сделать что-то подобное?
[SomeAttributeThatDoesThatMagically]
public async Task<object> LongRunningTaskAsync()
{
return SomethingThatTakesTooLong();
}