Comments (6)
The guidance here to never just return the Task seems like a safer default to use. In that video it looks like he mentions the troubles you can have if you return the Task from within a try/catch block, but there are more ways you can trip yourself up if you aren't awaiting the Task. This article from Stephen Cleary https://blog.stephencleary.com/2016/12/eliding-async-await.html mentions more of the pitfalls, and at the bottom has some recommendations that basically say don't just return the Task unless it is a very simple method that just passes through to another Task returning method and will not throw any exceptions or anything.
from aspnetcorediagnosticscenarios.
... has some recommendations that basically say don't just return the Task unless it is a very simple method that just passes through to another Task returning method and will not throw any exceptions or anything.
The example given in the article in the OP saying not to return the Task directly seems to be exactly the type of method this other advice says is safe to return the Task directly.
public Task<int> DoSomethingAsync()
{
return CallDependencyAsync();
}
So I’m still confused!
from aspnetcorediagnosticscenarios.
Agreed, the guidance here is a better general reference for people, default to the style that will be less surprising.
It even mentions the caveat that for high-performance scenarios it is then worth considering eliding, but only if you want/need that perf gain.
from aspnetcorediagnosticscenarios.
While reading through MSDN I found another directly contradictory example: The very last code block in https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/local-functions#local-functions-and-exceptions
that basically say don't just return the Task unless it is a very simple method that just passes through to another Task returning method and will not throw any exceptions or anything.
It's directly contradictory to this advice too as it basically is a wrapper which throws exceptions.
from aspnetcorediagnosticscenarios.
Useful notes on sync contexts when using async/await - https://devblogs.microsoft.com/dotnet/configureawait-faq/
from aspnetcorediagnosticscenarios.
Having something like this:
public class C
{
public Task M()
{
return FooAsync(); //a Task returning method.
}
}
It's totally fine if you do not care about handling exceptions in FooAsync()
.
In regard as to why it is faster to pass through the Task instead of awaiting. Check out the generated code to support async/await vs just passing through the Task:
from aspnetcorediagnosticscenarios.
Related Issues (20)
- IHttpClientFactory Question HOT 2
- Do You Have This Rules as Sonarqube Rules HOT 1
- Feature: Adding contributors section to the README.md file. HOT 2
- Copy Paste error in AsyncGuidance.md HOT 1
- Question about example HOT 2
- AsyncGuidance - Constructors and DI HOT 7
- Make TaskCreationOptions.LongRunning advice more explicit HOT 6
- await Task.WhenAll(task1, task2); task1.Result; task2.Result HOT 10
- Analyzer for “Prefer async/await over directly returning Task”? HOT 2
- "Always create `TaskCompletionSource<T>` with `TaskCreationOptions.RunContinuationsAsynchronously`" may be detrimentally overcorrecting. HOT 1
- Typo in HttpClientGuidance.md HOT 2
- How about long running work that is done using an async method HOT 5
- Mapping CancellationToken in controller's actions HOT 1
- Use `async/await` in 'A note about WebClient' section
- CPU consumption while using Task.Run vs Background thread HOT 2
- WindowsIdentity.RunImpersonated errors HOT 1
- Possible clarification for long-running work advice HOT 1
- Async void is not always bad HOT 11
- Event handler (async void) with EventArgs processing
- ASP.NET Core does have a SynchronizationContext when using Blazor HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from aspnetcorediagnosticscenarios.