相关疑难解决方法(0)

异步与多线程 - 有区别吗?

异步调用是否始终创建新线程?两者有什么区别?

异步调用是始终创建还是使用新线程?

维基百科说:

在计算机编程中,异步事件是独立于主程序流发生的事件.异步操作是在非阻塞方案中执行的操作,允许主程序流继续处理.

我知道异步调用可以在单线程上完成吗?这怎么可能?

language-agnostic multithreading asynchronous

129
推荐指数
9
解决办法
5万
查看次数

.NET中是否可以使用非阻塞,单线程,异步Web服务器(如Node.js)?

我正在研究这个问题,寻找一种在.NET中创建基于事件的单线程非阻塞异步Web服务器的方法.

这个答案首先看起来很有希望,声称代码的主体在一个线程中运行.

但是,我在C#中对此进行了测试:

using System;
using System.IO;
using System.Threading;

class Program
{
    static void Main()
    {
        Console.WriteLine(Thread.CurrentThread.ManagedThreadId);

        var sc = new SynchronizationContext();
        SynchronizationContext.SetSynchronizationContext(sc);
        {
            var path = Environment.ExpandEnvironmentVariables(
                @"%SystemRoot%\Notepad.exe");
            var fs = new FileStream(path, FileMode.Open,
                FileAccess.Read, FileShare.ReadWrite, 1024 * 4, true);
            var bytes = new byte[1024];
            fs.BeginRead(bytes, 0, bytes.Length, ar =>
            {
                sc.Post(dummy =>
                {
                    var res = fs.EndRead(ar);

                    // Are we in the same thread?
                    Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
                }, null);
            }, null);
        }
        Thread.Sleep(100);
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# events multithreading asynchronous node.js

57
推荐指数
4
解决办法
1万
查看次数

在C#中如何在同一个线程中运行方法异步

是否可以在与调用者相同的线程中异步定义和调用方法?假设我只有一个核心,我不希望线程管理开销与100个线程一样.

编辑 我问的原因是nodejs服务模型 - 一个线程上的所有东西都没有阻塞任何东西,这被证明是非常有效的,这让我想知道C#中是否有相同的东西(我自己无法实现).

Edit2嗯,正如评论节点中所指出的那样,节点毕竟不是单线程的(不过简单的负载测试显示,它只使用一个核心...),但我认为是什么让它如此高效是隐含的要求只写非阻止代码.这在C#中是可能的,除了不需要:)无论如何,谢谢大家...

在更多信息 这SO张贴,甚至更多这一个

c# multithreading asynchronous

2
推荐指数
1
解决办法
1803
查看次数