相关疑难解决方法(0)

任务和线程有什么区别?

在C#4.0中,我们已经TaskSystem.Threading.Tasks命名空间.之间有什么真正的改变ThreadTask.我为了学习而做了一些示例程序(帮助从MSDN获取)

Parallel.Invoke 
Parallel.For 
Parallel.ForEach 
Run Code Online (Sandbox Code Playgroud)

但有很多疑问,因为这个想法并不那么清楚.

我最初在Stackoverflow中搜索了类似类型的问题但可能是这个问题标题我无法得到相同的.如果有人知道之前发布的相同类型的问题,请提供链接的参考.

c# multithreading terminology task-parallel-library c#-4.0

366
推荐指数
7
解决办法
20万
查看次数

如何获得等待的Thread.Sleep?

我正在编写一个基于await/sleep范例的网络绑定应用程序.

有时会发生连接错误,根据我的经验,等待一段时间再重试操作是值得的.

问题是,如果我在await/async中使用Thread.Sleep或类似的阻塞操作,它会阻止调用程序线程中的所有活动.

我应该用什么来替换Thread.Sleep(10000)以获得相同的效果

await Thread.SleepAsync(10000)
Run Code Online (Sandbox Code Playgroud)

UPDATE

我更喜欢一个没有创建任何额外线程的答案

.net c# multithreading async-await

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

如何使用BackgroundWorker?

我知道它有3种方法.在我的程序中,我有一个发送消息的方法.这通常很晚,程序有时根本不响应按钮按下发送消息.有时它比我期望的晚5秒,程序冻结.我想使用a BackgroundWorker按预期发送消息,并允许程序始终正常运行.我有用于在按钮处理程序中发送消息的代码.现在我在哪里放这个等效的代码?我希望所有这些仍然可以通过按钮按下来处理.

这是合适的处理程序吗?

backgroundWorker1.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)

并在:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {}
Run Code Online (Sandbox Code Playgroud)

我要把我的代码放在按钮处理程序中?而这之前:

carga.progressBar1.Minimum = 0;
carga.progressBar1.Maximum = 100;
Run Code Online (Sandbox Code Playgroud)

Carga是ProgressBar的另一种形式.如何在此方案中使用BackgroundWorker?

c# backgroundworker

63
推荐指数
2
解决办法
16万
查看次数

Thread.Start()与ThreadPool.QueueUserWorkItem()

Microsoft .NET基类库提供了几种创建线程并启动它的方法.基本上,调用与提供相同类型服务的每个其他调用非常相似:创建表示执行流(或更多)的对象,为其分配表示要执行的执行流的委托,并最终根据委托签名,对象作为参数.

那么,有两种方法(基本上):

1)使用System.Threading.Thread课程.

Thread curr = new Thread(myfunction); /* In a class, myfunction is a void taking an object */
curr.Start(new Object()); /* Or something else to be downcast */
Run Code Online (Sandbox Code Playgroud)

2)使用System.Threading.ThreadPool课程.

ThreadPool.QueueUserWorkItem(myfunction, new Object()); /* Same philosophy here */
Run Code Online (Sandbox Code Playgroud)

我应该使用1)或2)有什么特殊原因吗?

  • 表现原因?
  • 模式?
  • 什么是最好的方法?

我有一种感觉,答案是:"视情况而定".能否列举一些方法比另一种更好的情况?

.net c# multithreading threadpool

42
推荐指数
4
解决办法
3万
查看次数

为什么Thread和Task之间的性能差异如此之大?

Windows 7,Intel CORE i3,64位,RAM 4Gb,2.27 GHz
.NET Framework 4.0

我有以下代码:

static void Main(string[] args)
{
    var timer = new Stopwatch();
    timer.Start();

    for (int i = 0; i < 0xFFF; ++i)
    {
        // I use one of the following line at time
        Task.Factory.StartNew(() => { });
        new Thread(() => { }).Start();
    }

    timer.Stop();

    Console.WriteLine(timer.Elapsed.TotalSeconds);
    Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)

如果我使用Task,输出总是小于0.01秒,但如果我使用Thread,输出总是大于40秒!
这怎么可能?为什么这么大的差异?

c# multithreading

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