这个程序会被视为异步吗?

时间:2017-01-09 18:38:29

标签: c# .net multithreading asynchronous task

假设我有一个像

这样的简单程序
        DatePickerDialog mDatePicker = new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener() {
            public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) {
                year = selectedyear;
                month = selectedmonth;
                day = selectedday;
                stardate.setText(new StringBuilder().append(day).append("-").append(month + 1).append("-").append(year).append(" "));
            }
        }, year, month, day);
        mDatePicker.setTitle("Please select date");
        mDatePicker.getDatePicker().setMaxDate(System.currentTimeMillis());
        mDatePicker.show();
    }
});

这技术上是否会“同步”,尽管它运行的后台线程在下一个工作单元(public static main(string[] args) { Task<int> hotTask = Task<int>.Run(() => SomethingThatRunsInBackgroundAndReturnsAnInt()); DoIndependentWork(); hotTask.Wait(); Console.WriteLine(hotTask.Result); } )启动并完成之前不需要完成?我无法在互联网上找到一个非常好的技术定义。

2 个答案:

答案 0 :(得分:3)

根据这个: Asynchronous vs synchronous execution, what does it really mean?

  

当您同步执行某些操作时,请等待它完成   然后继续进行另一项任务。当你执行某些事情   异步地,您可以在完成之前继续执行另一项任务。

在您的情况下,您执行SomethingThatRunsInBackgroundAndReturnsAnInt() 并且你不等待任务结束,而是执行另一个函数,这意味着它是一个异步程序

答案 1 :(得分:0)

是的,但从技术上讲,没有

也许这是一个缺点,但我会说你的程序使用异步操作,但不是本身异步。这是因为程序的main方法在程序完成处理之前不会返回。

当我们谈论异步方法时,我们不是在谈论使用多个线程的方法;我们正在讨论一种在工作完成之前几乎立即返回的方法。同样,对于一个程序,我们不是在讨论一个使用多个线程的程序,而是一个几乎立即返回并在工作完成之前返回的程序。

异步程序的一个例子是Windows Service。操作系统将调用服务的OnStart方法,该方法几乎立即返回。同时,该服务维护另一个线程,它以异步方式完成主要工作。

因此,您的计划不符合定义。