特别是
我知道如何管理线程等.我很想知道这是否是线程安全的做事方式.
class Program
{
// bogus object
class SomeObject
{
private int value1;
private int value2;
public SomeObject(int value1, int value2)
{
this.value1 = value1;
this.value2 = value2;
}
}
static void Main(string[] args)
{
var s = new SomeObject[10];
var threads = Environment.ProcessorCount - 1;
var stp = new SmartThreadPool(1000, threads, threads);
for (var i = 0; i < 10; i++)
{
stp.QueueWorkItem(CreateElement, s, i);
}
}
static void CreateElement(SomeObject[] s, int index)
{ …Run Code Online (Sandbox Code Playgroud) 我试图使用新的C#4.0 Parallel.ForEach函数在对象列表上执行并行函数.这是一个非常漫长的维护过程.我想让它按列表的顺序执行,以便我可以在前一点停止并继续执行.我该怎么做呢?
这是一个例子.我有一个对象列表:a1 to a100.这是当前的订单:
a1, a51, a2, a52, a3, a53...
Run Code Online (Sandbox Code Playgroud)
我想要这个订单:
a1, a2, a3, a4...
Run Code Online (Sandbox Code Playgroud)
我可以将一些对象无序运行,但只要我能在列表中找到一个点,我可以说在此之前所有对象都已运行.我阅读了并行编程csharp白皮书,但没有看到任何相关内容.ParallelOptions课堂上没有这个设置.
最近几天我一直在阅读有关 async/await 的内容。昨天我在第 9 频道上发现了这个视频,让我对某些事情感到惊奇。请考虑下面的幻灯片。

除了 Lucian Wischik 解决的问题之外,我还想知道变量赋值。假设我们更改了async voidinto async Task,并await在SendData调用之前添加。这使我们能够获取流,分配变量m_GetResponse,等待两秒钟并打印它。但是变量会发生什么?它可以由与读取不同的线程写入。我们是否需要某种内存屏障,使变量变得易失,或者其他什么?当我们打印它时它仍然为空吗?