간단히하기 위해 Xamarin nUnit 테스트 오류를 콘솔 응용 프로그램으로 재현했으며 이해할 수없는 것과 동일한 문제를 보여줍니다. 먼저 작동하는 코드와 작동하지 않는 코드를 차례로 선택하십시오.I 명령을 비동기로 실행 중
간단한 콘솔 응용 프로그램
public class Working
{
private MyViewModel _viewModel;
public Working()
{
Console.WriteLine("Start");
_viewModel = new MyViewModel();
}
static void Main(string[] args)
{
Working prog = new Working();
prog.Print();
}
public void Print()
{
_viewModel.NewSurveyCommand.Execute(null);
}
}
public class MyViewModel
{
public MyViewModel()
{
NewSurveyCommand = new MyCommand(RunTest);
}
public ICommand NewSurveyCommand { get; private set; }
private void RunTest()
{
Console.WriteLine("Running...");
Thread.Sleep(1000);
Console.WriteLine("Test done");
}
}
public class MyCommand : ICommand
{
private Action _action;
public MyCommand(Action action)
{
_action = action;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_action.Invoke();
}
}
이 잘 작동이 콘솔 인쇄 실행은 ... 다음 인쇄 테스트는 1 초에 완료. 이제 인쇄 실행 번째 비동기 버전 ...
public class Program
{
private ViewModel _viewModel;
public Program()
{
Console.WriteLine("Start");
_viewModel = new ViewModel();
}
static void Main(string[] args)
{
Program prog = new Program();
prog.Go();
}
async void Go()
{
await Print();
}
public async Task Print()
{
await Task.Run(() => _viewModel.NewSurveyCommand.Execute(null));
}
}
public class ViewModel
{
public ViewModel()
{
NewSurveyCommand = new Command(async() => await RunTest());
}
public ICommand NewSurveyCommand { get; private set; }
public async Task RunTest()
{
Console.WriteLine("Running...");
await Task.Run(() => Thread.Sleep(1000));
Console.WriteLine("Test done");
}
}
public class Command : ICommand
{
private Action _action;
public Command(Action action)
{
_action = action;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter)
{
return true;
}
public void Execute(object parameter)
{
_action.Invoke();
}
}
}
그래서 두 번째 경우는 기다린다 Task.Run (() =>에 Thread.sleep (1000)) 오면, 코드의 일부를 실행 ; 방법은 결코 돌아 오지 않을 것입니다. 나는 왜 그리고 어떻게 해결해야하는지 이해하지 못합니다. 누구도 같은 문제를 겪어 본 적이 있습니까? 감사.
가능한 중복 (https://stackoverflow.com/questions/9208921/cant -specify-the-async-modifier-on-the-main-method-of-a-console-app) – mjwills