我有一个主要方法从另一个类中调用方法,这些方法都是异步任务方法,但不返回任何内容。他们正在向REST API客户端发送获取请求。 这里有一个方法,在一个名为DbRequestHandler类的例子:试图在c#控制台应用程序中运行多个异步任务
public static async Task ReadRooms(HttpClient client)
{
// HTTP GET all rooms
HttpResponseMessage response = await client.GetAsync("api/v1/rooms");
if (response.IsSuccessStatusCode)
{
StreamWriter file = new StreamWriter("xmlRooms.xml", false);
string rooms = await response.Content.ReadAsStringAsync();
file.Write(rooms);
file.Flush();
Console.Out.Write(rooms);
Console.ReadKey();
}
}
下面是通过调用DbRequestHandler运行的程序的主要方法:
static void Main(string[] args)
{
var url = System.Configuration.ConfigurationManager.AppSettings["CentrisURL"];
if (url == null)
{
Console.WriteLine("Failed to load API url");
}
var client = new HttpClient();
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
//DbRequestHandler.ReadRooms(client).Wait();
//DbRequestHandler.ReadRoomsType(client).Wait();
//DbRequestHandler.ReadCourses(client).Wait();
DbRequestHandler.ReadTeachers(client).Wait();
}
我的问题是,我似乎无法弄清楚如何调用所有这些独立方法,这些方法都是异步任务方法,我知道它与.Wait()有关,但我一直无法找到正确的解决方案,我尝试了一些。如果我取消注释对DbRequestHandler方法的所有调用,则第一行是唯一被执行的行。有没有人有建议如何解决这个问题?我很难理解异步任务。希望我的问题很明确。我会读你建议阅读的任何链接,但我不能保证我就明白了:P
这看起来非常好,我虽然这会工作,但我得到了与另一个解决方案相同的错误,那就是:“'await'操作符只能在异步方法中使用,请考虑使用' async'修饰符并将其返回类型更改为'Task' – 2014-09-27 17:39:51
@MargretKristjansdottir对不起...再试一次... – Aron 2014-09-27 17:40:50
@Aron你不能使'Main'异步,如果你正在编写一个控制台应用程序,你必须调用'。 Wait()'。如果这是一个事件中的WCF或winforms项目,你的解决方案将是正确的。 – 2014-09-27 17:47:05