我有一个简单的XML来自URL解析器,如下所示:
static async Task<string> TestReader(string URL)
{
string XMLtext = "";
XmlReaderSettings settings = new XmlReaderSettings();
settings.Async = true;
using (XmlReader reader = XmlReader.Create(URL, settings))
{
while(await reader.ReadAsync())
{
switch(reader.NodeType)
{
case XmlNodeType.Element:
XMLtext += reader.LocalName;
break;
case XmlNodeType.Text:
XMLtext += reader.GetValueAsync();
break;
}
}
return XMLtext;
}
}
我想在我的控制台应用程序中测试它,但是我不知道如何从解析器返回XML文本。我在Main函数中有这样的代码,但它并不像我想要的那样工作:
static void Main(string[] args)
{
Task T = TestReader("http://somewebsite/YML.xml");
Console.WriteLine(Convert.ToString(T));
}
它返回如下内容:“System.Runtime.CompilerServices.AsynctAskMethodBuilder 1+AsyncStateMachineBox1[System.String,ParserXml.Program+D__0]”。
我还尝试了t.start(),但编译器给我一个运行时错误“start可能不被调用对一个promise-style task”。
有可能在屏幕上打印XMLtext吗?
您需要await
方法来获取返回的字符串。这意味着您的主
方法也要异步
static async Task Main(string[] args)
{
string result = await TestReader("http://somewebsite/YML.xml");
Console.WriteLine(result);
}
要么按照@Canton7所说的做,要么从非异步方法调用异步方法:
var result = Task.Run(() => TestReader("http://somewebsite/YML.xml")).Result;