我是C#的新手,现在我正在尝试学习异步并等待我提出自己的例子。但我在实施它时遇到了麻烦。基本上我从MSDN上偷了这个例子:https://msdn.microsoft.com/en-us/library/system.collections.ienumerable(v=vs.110).aspx
但是在主要方法中,而不是那里,我把:
static void Main(string[] args)
{
Person[] pArray = new Person[100];
//populate first 50 people
//TODO: USE ASYNC
//populate last 50 people
//TODO: USE ASYNC
//await here
People peopleList = new People(pArray);
//do some linq
Console.ReadKey();
}
我真的不知道如何实现TODO部分(我不确定这是否也是如此)。我应该创建一个与main平行的任务方法吗?但是pArray不会以这种方式成为全球性的,任务功能不应该能够修改变量,对吗?我想知道你如何实现这一点。任何提示将不胜感激!
谢谢!
答案 0 :(得分:1)
如果开始使I / O绑定操作异步,那么学习succeeded
/ @FXML
private void addOfficeBarrierSelect() {
App.getInstance().showProgressIndicator(myController);
Task<ScreensController> task = new Task<Void>() {
@Override
protected ScreensController call() throws Exception {
ScreensController colllectScreenController = new ScreensController();
colllectScreenController.loadScreen(Screens.ADD_OFFICE_BARRIER);
colllectScreenController.setScreen(Screens.ADD_OFFICE_BARRIER);
return colllectScreenController;
}
@Override
protected void succeeded() {
super.succeeded();
content.setContent(getValue());
App.getInstance().hideProgressIndicator(myController);
}
@Override
protected void failed() {
super.failed();
App.getInstance().hideProgressIndicator(myController);
}
};
new Thread(task).start();
}
要容易得多。只创建async
并将它们添加到数组是CPU绑定的,而不是I / O绑定。
对于await
,您希望从I / O开始。例如,您可能需要下载Google的主页:
People
此外,使用UI应用程序而不是控制台应用程序,学习async
会更容易。因此,请在按钮单击事件中粘贴上面的代码,看看会发生什么。