News for hackers. Stuff that matters.
Re:.NET 5.0 by mmis1000 on Tuesday November 10, 2020 @12:17PM (#25048351)
For simplicity? Just like how js get async await thing eventually.
Re:.NET 5.0 by buraktamturk on Tuesday November 10, 2020 @12:31PM (#25048515)
async/await is the first class citizen .NET and C#. You just mark your function as async and return Task<OriginalReturnValue> and you can call any async function with await, just like js.
Re:.NET 5.0 by hackerfromthefu on Tuesday November 10, 2020 @08:32PM (#25054568)
That's a factual definition of how to use the first step of async, however it's missing the point.

Async makes your code do significantly more complex thnigs, and while the compiler makes the easy stuff easy, the underlaying complexity hasn't gone away it's just been abstracted, and somewhat leakily.

You can't do 'just' what you said, you also have to deal with of boundary conditions that don't exist in non-async code, plus if you want to understand what your code is doing you now need to keep two mental models of program execution in your mind.

For an introduction to the complexity of async, and practical considerations you need to manage to use it well this official documentation is a place to start - and note the article is pretty long, async does have a lot of additional complexity.

https://docs.microsoft.com/en-us/archive/msdn-magazine/2011/...

Btw I'm not saying don't use Async. Async is an incredibly powerful and valuable tool. But it has costs and those are weighted toward downstream in the software lifecycle and you should be aware of them when deciding which situations that tool is appropriate in.

Yes async is a first class citizen in .NET and thats emphasised by the framework libraries using it everywhere. But they are writing a framework to be consumed widely by users of differing requirements so they have real reasons to support the widest possible use with highest possible performance. Most application code doesn't really have those needs.

Using async should be considered as a tool to reach for (when appropriate) not a default for every situation because it has significant costs through the lifecycle of the system.

Re:.NET 5.0 by ClumsyPilot on Tuesday November 10, 2020 @12:54PM (#25048808)
I fail to see how this is sensible in the slightest - you then have to re-write the code if you want the application to scale. Otherwise you are wasting memory, trashing GC, spawning all these extra threads.All awaitable operations like network requests, disk reads, etc, should be async. Why would you write potato code?
Re:.NET 5.0 by nullsense on Tuesday November 10, 2020 @02:36PM (#25050620)
>Why would you write potato code?

Side note: this gave me a good laugh. I just pictured it being used as a sign off on PR reviews.

Is it a technical term? If it's not I think it should be, and if it is I want to know what the exact nature of potato code is, so I can call it out when I see it in the wild.

Re:.NET 5.0 by Scarbutt on Tuesday November 10, 2020 @09:53PM (#25055036)
you then have to re-write the code if you want the application to scale.

Scaling machines (VMs, containers) is a solved problem and very easy to do today.

Re:.NET 5.0 by withinboredom on Tuesday November 10, 2020 @12:21PM (#25048407)
So you want to pause the thread and keep it from processing other requests for simplicity?
Re:.NET 5.0 by CodesInChaos on Tuesday November 10, 2020 @12:46PM (#25048713)
Unless you have a lot of concurrent connections (C10k problem), having one thread per active request isn't a big deal. For my web applications, requests spend most of their time waiting on the database, and an open transaction is at least as expensive as a thread in an app server for many databases. So I agree that for most applications async isn't worth the complexity they introduce. In many implementations they also mess up your stacktraces, which makes debugging production issues harder.
Re:.NET 5.0 by manigandham on Tuesday November 10, 2020 @02:37PM (#25050643)
.NET has millions of developers. They optimize for the greatest impact and async is necessary for performance. In fact high-performance is an explicit goal of the framework and it ranks at the top of the TechEmpower benchmarks.

Even if you don't need the performance, async code helps keep your app responsive and use less resources on your server. It's far better to have async and not need it then try to refactor your entire ap when it's necessary.

Re:.NET 5.0 by nullsense on Tuesday November 10, 2020 @02:41PM (#25050701)
The web server uses a threadpool anyway. You're not creating threads that don't already exist. You're simply able to use the threads you do have for other tasks while waiting for I/O.
Re:.NET 5.0 by mmis1000 on Tuesday November 10, 2020 @12:34PM (#25048543)
That is literally how php does. Let's fire a thread for every request and block on db reading or any action that require io. And it seems it works (at least for php)
Re:.NET 5.0 by virgilp on Tuesday November 10, 2020 @12:49PM (#25048750)
.NET is meant for stuff like microservices; you don't see lots of those written in php, right?

Also, for high-traffic websites, that's really not a great idea. You might say "but Facebook, PHP" - I'm really certain that their current codebase doesn't have a thread that blocks on DB for each user request.

Re:.NET 5.0 by zerkten on Tuesday November 10, 2020 @02:18PM (#25050294)
> .NET is meant for stuff like microservices;

What does this mean? .NET has been around before SOA was a term and microservices is an evolution of that. The concepts are orthogonal and you could write microservices in PHP, if you really wanted. Like Java, the .NET runtime and platform is highly efficient. That's what .NET has historically had over PHP/Python/Ruby, but I don't keep up with the PHP and Ruby platforms these days.

I feel like this is another one of those discussions like the "Python GIL problem." Whether it's a really a problem depends on the circumstances, and the circumstances were it is a problem affects fewer people than the HN threads suggest.

Re:.NET 5.0 by int_19h on Tuesday November 10, 2020 @03:33PM (#25051520)
I'm not sure where SOA as a specific term showed up, but the very first release of .NET very much emphasized web services in the docs, presentations etc. Back then, this meant SOAP.
Re:.NET 5.0 by BoorishBears on Tuesday November 10, 2020 @01:26PM (#25049250)
I don't get why the auth being async is a hang up but at the same time, most projects can handle not scaling to Facebook-scale and the sooner developers accept that, the sooner we can escape a great gnashing of teeth.

I'd be willing to bet more projects have been killed by trying to architecture for performance up front than have been killed by being too successful for their own good and keeling over.

If Twitter could make it past the Fail Whale days, I think most of us can too.

Re:.NET 5.0 by virgilp on Tuesday November 10, 2020 @02:12PM (#25050158)
I'd agree if you talk about "most projects". But here we're talking about a platform - you can't fault Microsoft for caring about performance! .NET is absolutely not meant only for small sites, my current employer is heavily invested in .NET and we'd probably be dead (performance-wise) without async. Definitely couldn't run our services with PHP (not without Facebook-like investments), we already outgrew that kind of traffic.
Re:.NET 5.0 by oaiey on Tuesday November 10, 2020 @05:51PM (#25053158)
Until you look who is faster and has more througput. The only way how PHP can do (via swoole and friends) is by adopting non-blocking frameworks. And remember througput * duration = Serverlese costs
Re:.NET 5.0 by jhomedall on Tuesday November 10, 2020 @12:58PM (#25048864)
That's just standard threading, not async/await.