我有这个方法:
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();
}
答案 0 :(得分:1)
属性通常是元数据,尽管可以定义可以执行的属性(例如WCF中的安全行为)但是,必须首先查找它。你的属性不会神奇地运行。
我怀疑你可能不得不使用动态代理。
看看WCF如何为创意做点事。