For best performance and reliability, implement your service methods as asynchronous to avoid **async over sync**, that can cause unexpected problems, For more information, see [Should I expose synchronous wrappers for asynchronous methods?](https://devblogs.microsoft.com/dotnet/should-i-expose-synchronous-wrappers-for-asynchronous-methods/)
### Virtual Methods Requirement
For **class proxies**, methods need to be marked as `virtual` so that they can be overridden by the proxy. Otherwise, interception will not occur.
````csharp
public class MyService : ITransientDependency
public class MyService : IExecutionTimeLogEnabled, ITransientDependency
{
// This method CANNOT be intercepted (not virtual)
public void CannotBeIntercepted()
@ -190,5 +209,5 @@ To avoid generating dynamic proxies for specific types, use the static class `Dy
* [Video tutorial: Interceptors in ABP Framework](https://abp.io/video-courses/essentials/interception)