如何在LinqPad中运行以下代码 C#Program 谢谢......
class ThreadTest
{
static void Main()
{
Thread t = new Thread (WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 1000; i++) Console.Write ("x");
}
static void WriteY()
{
for (int i = 0; i < 1000; i++) Console.Write ("y");
}
}
xxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
static void Main()
{
Thread t = new Thread (ThreadTest.WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 1000; i++) Console.Write ("x");
}
class ThreadTest
{
public static void WriteY()
{
for (int i = 0; i < 1000; i++) Console.Write ("y");
}
}
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy...
如结果预期所示,它应该是X和Y混合 不幸的是,实际结果是X的1000倍和Y的1000倍
更新
此示例 - 以及Nutshell中C#5的并发章节中的所有其他示例都可以作为LINQPad示例库下载。转到LINQPad的样本TreeView,然后单击“下载/导入更多样本”并选择第一个列表。 - Joe Albahari
答案 0 :(得分:3)
线程切换本质上是非确定性的。我可以多次运行你的程序并获得不同的结果。
如果您希望切换更明显,请添加一些暂停:
static void Main()
{
Thread t = new Thread (ThreadTest.WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 1000; i++)
{
Console.Write ("x");
Thread.Sleep(1);
}
}
class ThreadTest
{
public static void WriteY()
{
for (int i = 0; i < 1000; i++)
{
Console.Write ("y");
Thread.Sleep(1);
}
}
}
答案 1 :(得分:1)
我无法解释为什么这样可行,但改为使用Dump()
似乎使其行为类似于OP想要的x和y与每次运行“混合”(尽管每个输出之间有换行符):
void Main()
{
Thread t = new Thread (ThreadTest.WriteY); // Kick off a new thread
t.Start(); // running WriteY()
// Simultaneously, do something on the main thread.
for (int i = 0; i < 1000; i++) "x".Dump();
}
class ThreadTest
{
public static void WriteY()
{
for (int i = 0; i < 1000; i++) "y".Dump();
}
}
LINQPad的转储命令将输出反馈到XHTML流中 使用嵌入式Web浏览器进行显示(您可以看到这一点 右键单击查询结果并选择“查看源”。该 转换为XHTML完全是使用LINQ to XML完成的 大LINQ查询!结果的延期扩展通过 JavaScript,这意味着XHTML在查询后完全预先填充 完成执行。 lambda窗口使用自定义填充 表达式树访问者(简单地在表达式树上调用ToString 是不好的,因为它将整个输出放在一行上。)
我也知道LinqPAD会覆盖默认的Console.WriteLine
behavior,所以也许这与它有关。