前端Javascript异步执行和C#异步执行有什么区别吗?

比如,js的ajax、settimeout和C#异步执行委托BeginInvoke,有什么区别?
js始终都是单线程异步,.Net C# 异步也是始终是单线程吗?还是会根据实际需要会切换成多线程执行?

.Net C# 原始的异步操作都是多线程操作,并不是单线程的。例如C#5.0 中的await操作,会直接return并通过其他线程执行等待,等待结束后返回调用线程继续执行。
当然,如果你是在Unity中使用C#,则Unity提供的C#异步操作(StartCoroutine IEnumerator)则是单线层操作。

参考GPT和自己的思路:

前端Javascript异步执行和C#异步执行在实现的方式上存在一些差异。Javascript虽然是单线程异步执行的,但是通过回调函数和Promise机制可以实现异步编程。而C#的异步执行则是通过使用委托的BeginInvoke方法实现的,这种方式可以实现在多线程环境下执行任务提高性能。

在具体实现上,js的ajax和settimeout都是使用回调函数实现的,即在异步操作完成后调用相应的回调函数进行处理。而C#中的委托和BeginInvoke则是采用将异步操作封装成一个委托,在执行异步操作时调用BeginInvoke方法进行异步执行。

对于C#异步执行委托BeginInvoke,可以通过设置线程池来控制异步执行的线程数量。一般情况下,异步操作会在单线程下执行,但是当某个操作需要耗费较长时间,需要占用线程时,线程池会进行适当调整,将该操作放在另一个线程中执行,从而提高执行效率。

总之,前端Javascript异步执行和C#异步执行有着各自的实现方式和机制,要根据具体情况选择合适的方式来实现异步编程。