Я создал аспект PostSharp, который должен регистрировать время выполнения любого метода, в котором я его использую.Неточное ведение журнала асинхронного метода с использованием StopWatch внутри PostSharp MethodInterceptionAspect
Однако, похоже, что он работает не так, как я ожидал, с sw.ElapsedMilliseconds
всегда между 0 и 3 миллисекундами.
[Serializable]
[AttributeUsage(AttributeTargets.Method)]
public sealed class PerfLogAttribute : MethodInterceptionAspect
{
public override void OnInvoke(MethodInterceptionArgs args)
{
var sw = new Stopwatch();
sw.Start();
args.Proceed();
sw.Stop();
log.Debug(sw.ElapsedMilliseconds);
}
}
Используя это следующим образом:
[PerfLog]
public async Task<bool> DoSomethingAsync() {
// Adding a delay to test (or call database async)
await Task.Delay(5000);
return true;
}
Вы уверены, что postharp работает с async/await? Это может быть только измерение до «Ожидание Task.Delay (5000)», не считая его. Googling «PostSharp async MethodInterceptor» вызывает некоторые хиты, которые могут иметь значение. –