Tag: multithreading

ASP.NET中的ThreadStaticAttribute

我有一个组件需要在每个线程之前存储static值。 它是一个通用组件,可以在许多场景中使用,而不仅仅在ASP.NET中使用。 我正在考虑使用[ThreadStatic]属性来实现我的目标。 假设它在ASP.NET场景中也能正常工作,因为我假设每个Request都在自己的线程中调用。 经过一些研究后,我发现Scott Hanselman 撰写的这篇博客文章说在ASP.NET中使用[ThreadStatic]时要小心。 然而,大多数评论(在post下面)都不同意斯科特写的,说请求总是在一个线程中运行,并且该线程不会被另一个请求同时使用。 这也是我所相信的,但我很乐意在这里对你的专家有一些看法。

如果在没有完成任务的情况下超时,Task.Wait(int)是否会停止任务?

我有一个任务,我希望它可以在一秒钟内运行,但如果需要的时间超过几秒钟,我想取消任务。 例如: Task t = new Task(() => { while (true) { Thread.Sleep(500); } }); t.Start(); t.Wait(3000); 请注意,等待3000毫秒后,等待到期。 超时到期或任务是否仍在运行时,任务是否被取消?

HttpContext.Current如何在multithreading环境中工作?

所以我想知道asp.net是如何确定范围静态属性的,当(据我所知)asp.net是multithreading的。 一种理论认为,ASP.NET人员为每个请求维护一个不同的appdomain …但这似乎不可行。 另一种理论认为.Current方法查看当前的Thread,然后使用它来查找某些哈希表(或其他静态存储机制)中的http上下文。 无论哪种方式,这是一种看似非常有用的技术……我想利用它,但绝对不想调试共享状态错误: – /

C#multithreading聊天服务器,手柄断开连接

我正在寻找一种处理断开连接的方法,因为每次关闭客户端时,服务器都会停止工作。 我收到一条错误消息,它在此行中“无法读取超出流的末尾”: string message = reader.ReadString(); 此外,我需要一种方法来从客户端列表中删除断开连接的客户端。 这是我的代码:服务器 using System; using System.Threading; using System.Net.Sockets; using System.IO; using System.Net; using System.Collections.Generic; namespace Server { class Server { public static List clients = new List(); static void Main(string[] args) { IPAddress ip = IPAddress.Parse(“127.0.0.1”); TcpListener ServerSocket = new TcpListener(ip, 14000); ServerSocket.Start(); Console.WriteLine(“Server started.”); while (true) { TcpClient […]

线程/线程池或后台工作者

我想知道什么用于需要很多性能的任务。 Backgroundworker , Thread还是ThreadPool ? 到目前为止,我一直在使用Threads,但我需要提高应用程序的速度。

C#等待多个线程完成

我有一个Windows窗体应用程序,我正在检查所有串口,以查看是否已连接特定设备。 这就是我如何分拆每个线程。 下面的代码已经从主要的gui线程中分离出来。 foreach (cpsComms.cpsSerial ser in availPorts) { Thread t = new Thread(new ParameterizedThreadStart(lookForValidDev)); t.Start((object)ser);//start thread and pass it the port } 我希望下一行代码等到所有线程都完成。 我已经尝试在那里使用t.join ,但这只是线性处理它们。

如何使用ConcurrentQueue 进行线程处理

我试图弄清楚使用队列的最佳方法是什么。 我有一个返回DataTable的进程。 反过来,每个DataTable都与之前的DataTable合并。 有一个问题,在最终的BulkCopy(OutOfMemory)之前要保留的记录太多。 所以,我已经确定我应该立即处理每个传入的DataTable。 考虑ConcurrentQueue …但是我没有看到WriteQueuedData()方法如何知道将WriteQueuedData()列并将其写入数据库。 例如: public class TableTransporter { private ConcurrentQueue tableQueue = new ConcurrentQueue(); public TableTransporter() { tableQueue.OnItemQueued += new EventHandler(WriteQueuedData); // no events available } public void ExtractData() { DataTable table; // perform data extraction tableQueue.Enqueue(table); } private void WriteQueuedData(object sender, EventArgs e) { BulkCopy(e.Table); } } 我的第一个问题是,除了我实际上没有任何事件要订阅的事实,如果我异步调用ExtractData()这将是我需要的全部内容吗? 第二,我是否缺少ConcurrentQueue函数的方式,需要某种forms的触发器与排队对象异步工作? 更新我刚刚从ConcurrentQueue派生了一个具有OnItemQueued事件处理程序的类。 […]

在MultiThreaded方案中正确锁定List ?

好吧,我无法正确理解multithreading场景。 很抱歉再次提出类似的问题,我只是在互联网上看到许多不同的“事实”。 public static class MyClass { private static List _myList = new List; private static bool _record; public static void StartRecording() { _myList.Clear(); _record = true; } public static IEnumerable StopRecording() { _record = false; // Return a Read-Only copy of the list data var result = new List(_myList).AsReadOnly(); _myList.Clear(); return result; } public […]

什么线程在`await`关键字后运行代码?

我先发一个简单的例子: private void MyMethod() { Task task = MyAsyncMethod(); task.Wait(); } private async Task MyAsyncMethod() { //Code before await await MyOtherAsyncMethod(); //Code after await } 假设我在单线程应用程序中运行上述代码,就像控制台应用程序一样。 我很难理解代码//Code after await的代码是如何运行的。 据我所知,当我在MyAsyncMethod()控件中点击await关键字时,会返回到MyMethod() ,但后来我用task.Wait()锁定了该线程。 如果线程被锁定,那么如果应该接受它的线程被锁定,那么//Code after await运行//Code after await怎么办? 是否创建了一个新线程来//Code after await ? 或者主线程是否神奇地走出task.Wait()运行//Code after await ? 我不确定这是怎么回事?

解决WinForms中的跨线程exception

目前我正在使用WinForms(在C#中),我必须在后台运行该应用程序。 为此,我使用异步。 当我运行应用程序时,它显示了一个例外 “跨线程操作无效:控制”从其创建的线程以外的线程访问。” 我该如何解决这个错误?