草庐IT

【JavaEE】进程和线程

全部标签

c# - C#中的跨线程事件处理

我正在使用一个在单独的线程中运行自己的事件调度程序的框架。该框架可能会生成一些事件。classSomeDataSource{publiceventOnFrameworkEvent;voidFrameworkCallback(){//Thisfunctionrunsonframework'sthread.if(OnFrameworkEvent!=null)OnFrameworkEvent(args);}}我想将这些事件传递给Winforms线程上的Winforms对象。我显然检查了InvokeRequired并在必要时将其分派(dispatch)给Winforms线程。classSome

c# - 限制异步方法的并行度而不阻塞线程池线程

我有一个异步方法RequestInternalAsync()它向外部资源发出请求,并希望编写一个包装方法,通过减少并行性来限制对该方法的并发异步请求的数量。想到的第一个选项是TaskScheduler并发性有限(LimitedConcurrencyLevelTaskScheduler、ConcurrentExclusiveSchedulerPair等)。但要使用自定义调度程序运行任务,我必须使用TaskFactory启动任务只接受Action,即我不能通过不阻塞额外的线程来等待内部方法的执行来做到这一点。第二个选项是SemaphoreSlim,它完成了它的工作,但在这种情况下,我正在实

c# - 高性能套接字上的异步等待与线程池与多线程(C10k 解决方案?)

我对async-await、pool和thread真的很困惑。主要问题始于这个问题:“当我必须处理10k套接字I/O时我能做什么?”(又名TheC10kProblem)。首先,我尝试创建一个自定义的线程池架构它使用一个主Queue和多个Thread来处理所有传入数据。这是一次关于理解的很棒的经历thread-safety和multi-threading但thread是一个矫枉过正现在使用async-await。后来,我用async-await实现了一个简单的架构,但我无法理解为什么“async和await关键字不会导致要创建的额外线程。”(fromMSDN)?我认为有必须有一些thre

c# - 从工作线程调用 UI 线程时出现死锁

当我从工作线程调用UI线程时出现死锁。实际上,工作线程在调用行上被阻塞了:return(ucAvancementTrtFamille)mInterfaceTraitement.Invoke(d,newobject[]{psFamille});奇怪的是UI线程(如果我错了,请纠正我,是主线程)是空闲的。有什么办法可以:看看我实际尝试调用哪个线程?看看所说的线程真正在做什么?我们可以在下图中看到,工作线程(ID3732)阻塞在Invoke行上,MainThread在应用程序的主函数中处于空闲状态。编辑:这是主线程的堆栈:Edit2:实际上,我第二次暂停了程序,这里是堆栈的样子:Edit3:

c# - 在 Mono 中处理通信的简单跨平台进程?

我正在开发一个将在Linux、Mac和Windows上运行的Mono应用程序,并且需要应用程序(在单个操作系统上)能够相互发送简单的字符串消息。具体来说,我想要一个单实例应用程序。如果尝试启动第二个实例,它将改为向已在运行的单个实例发送一条消息。DBus已经过时了,因为我不想让它成为一个额外的要求。套接字通信似乎很难,因为Windows似乎不允许连接权限。Mono似乎不支持内存映射文件。Mono似乎不支持命名管道。Mono似乎不支持IPC。那么,有没有一种简单的方法可以将单台机器上的字符串消息发送到适用于每个操作系统的服务器应用程序,而无需权限或其他依赖项?

c# - 将方法放入任务中以避免阻塞 asp.net 线程

我想知道以下代码是否有任何我在网络服务器上运行时不知道的陷阱。通读精品系列http://reedcopsey.com/series/parallelism-in-net4/我找不到与我的问题具体相关的任何内容,与msdn一样,所以我想我会把它带到这里。调用示例:publicActionResultIndex(){ViewBag.Message="WelcometoASP.NETMVC!";Task.Factory.StartNew(()=>{//ThisissomelongcompletingtaskthatIdon'tcareabout//Sayloggingtothedatabas

c# - 如何让任务不在 UI 线程上执行

以下代码是对实际应用中的一段代码的简化。下面的问题是长时间的工作将在UI线程中运行,而不是在后台线程中运行。voidDo(){Debug.Assert(this.Dispatcher.CheckAccess()==true);Task.Factory.StartNew(ShortUIWork,CancellationToken.None,TaskCreationOptions.None,TaskScheduler.FromCurrentSynchronizationContext());}voidShortUIWork(){Debug.Assert(this.Dispatcher.Ch

c# - 检查 null 线程安全吗?

我有一些代码在新线程上抛出异常,我需要在主线程上确认和处理这些异常。为实现这一点,我通过使用保存抛出异常的字段在线程之间共享状态。我的问题是我是否需要在检查null时使用锁,就像我在下面的代码示例中所做的那样?publicclassMyClass{readonlyobject_exceptionLock=newobject();Exception_exception;publicMyClass(){Task.Run(()=>{while(CheckIsExceptionNull()){//Thisconditionalwillreturntrueif'somethinghasgonew

c# - 具有进程内托管的 Dotnet Core 多个启动类

我有一个dotnet核心v.2.1应用程序,它利用“startup-class-by-environment-name-convention”为不同的环境使用不同的Startup类,例如开发,分期和生产。Program.Main.CreateWebHost方法看起来与此类似:publicstaticIWebHostBuilderCreateWebHostBuilder(string[]args){varstartupAssembly=Assembly.GetExecutingAssembly();varwebHostBuilder=WebHost.CreateDefaultBuilde

c# - CultureInfo线程安全

我有一个多线程应用程序来解析一些文本,它需要使用英语文化信息来解析文本中的数字。所以,我不想每次调用解析函数时都创建EngCulture。目前我将EngCulture作为参数传递,但我对此并不满意。我想将EngCulture定义为静态成员,以便线程共享它。Msdn文档说“此类型的任何公共(public)静态(在VisualBasic中共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”我只是在使用以下函数,那么我怎么知道TryParse是否使用了EngCulture的任何实例成员?publicstaticCultureInfoEngCulture=newCultureInfo