I have this method in my service:
public virtual async Task FindByIdAsync(string userId)
{
this.ThrowIfDisposed();
if (userId == null)
this
in async
methods without special thread-locked object is dangerousIf you cannot use await
, use a code like following.
Task<User> task = TaskFindByIdAsync();
task.Wait(); //Blocks thread and waits until task is completed
User resultUser = task.Result;
The best solution is to make the calling method async
and then use await
, as Bas Brekelmans pointed out.
When you make a method async
, you should change the return type (if it is void
, change it to Task
; otherwise, change it from T
to Task<T>
) and add an Async
suffix to the method name. If the return type cannot be Task
because it's an event handler, then you can use async void
instead.
If the calling method is a constructor, you can use one of these techniques from my blog. It the calling method is a property getter, you can use one of these techniques from my blog.