Context
The code block
public async void OnGet(int id)
{
Book = await _db.Books.SingleOrDefaultAsync(x => x.Id == id);
return Page();
}
Issue
This code will generate the following exception
System.ObjectDisposedException: 'Cannot access a disposed context instance. A common cause of this error is disposing a context instance that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling 'Dispose' on the context instance, or wrapping it in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Reason
This exception will be thrown because the method return type is async void
. In general, when using async void
is bad, because:
- You can't wait for its completion
- Any unhandled exceptions will terminate the process
Solution
So return async Task
instead of async void
from the method as follows:
public async Task OnGet(int id)
{
Book = await _db.Books.SingleOrDefaultAsync(x => x.Id == id);
return Page();
}
Comments