【发布时间】:2016-09-06 03:22:52
【问题描述】:
为了演示 C# 的异步流程,我编写了一个简单的程序 (为了展示它与 Python 的区别,因为 Python 是同步的,因为 GIL)。
为什么 func2() 的执行要等待 func1() 完成?
void main()
{
Console.WriteLine("main");
func1();
func2();
}
public void func1()
{
Console.WriteLine("func1");
double i = 0;
while(true)
{
i += 1;
if (i > 100000000)
{
break;
}
}
func(3);
func(4);
}
public void func2()
{
Console.WriteLine("func2");
func(5);
func(6);
}
public void func(int number)
{
Console.WriteLine(number);
}
在 func1() 中,我正在运行一个循环以使程序等待,以便 main() 继续运行并在 func(3) 和 func(4) 之前调用 func2()。但每次,它都以同步方式运行并按此顺序打印输出:
main
func1
3
4
func2
5
6
即func2() 总是在 func4() 之后调用,这在异步流程中是我没想到的。
为什么 func2() 的执行要等待 func1() 完成?
谢谢
【问题讨论】:
-
阅读
async关键字。你需要告诉程序异步做事情是可以的,否则它会假设它们需要按顺序完成 -
Python 也可以是异步的...
-
旁注:考虑不要自己定义“脚本”或“编程”——这可能会导致围绕您的帖子进行不必要的讨论。这真的与你的问题无关。
-
@AlexeiLevenkov:好点:)。我将删除那部分。