我最近发现了CTP异步库,我想尝试编写一个玩具程序来熟悉新概念,但是我遇到了一个问题。
我相信代码应该写出来
Starting
stuff in the middle
task string
但事实并非如此。这是我正在运行的代码:
namespace TestingAsync
{
class Program
{
static void Main(string[] args)
{
AsyncTest a = new AsyncTest();
a.MethodAsync();
}
}
class AsyncTest
{
async public void MethodAsync()
{
Console.WriteLine("Starting");
string test = await Slow();
Console.WriteLine("stuff in the middle");
Console.WriteLine(test);
}
private async Task<string> Slow()
{
await TaskEx.Delay(5000);
return "task string";
}
}
}
有什么想法吗?如果有人知道一些很好的教程和/或视频来展示这些概念,那就太棒了。
答案 0 :(得分:5)
您正在调用异步方法,但只是让您的应用程序完成。选项:
Thread.Sleep
(或Console.ReadLine)添加到Main
方法,以便在后台线程上发生异步内容时可以睡眠Task
并从Main
方法等待。例如:
using System;
using System.Threading.Tasks;
class Program
{
static void Main(string[] args)
{
AsyncTest a = new AsyncTest();
Task task = a.MethodAsync();
Console.WriteLine("Waiting in Main thread");
task.Wait();
}
}
class AsyncTest
{
public async Task MethodAsync()
{
Console.WriteLine("Starting");
string test = await Slow();
Console.WriteLine("stuff in the middle");
Console.WriteLine(test);
}
private async Task<string> Slow()
{
await TaskEx.Delay(5000);
return "task string";
}
}
输出:
Starting
Waiting in Main thread
stuff in the middle
task string
就视频而言,我在今年早些时候在Progressive .NET上进行了异步会话 - the video is online。另外,我有一些blog posts about async,包括我的Eduasync系列。
此外,Microsoft的团队还有很多视频和博客文章。有关大量资源,请参阅Async Home Page。
答案 1 :(得分:1)
你是在5000ms开始之前退出程序。