我有类似下面的内容。所以每个值都取决于另一个:
var valueX = methodX();
var valueY = methodDependingOnX(valueX);
var valueZ = methodDependingOnY(valueY);
// More code here
我想知道如何以异步方式处理它,以保持UI响应? 这是我的真实代码:
Parser parser = new Parser();
LinqQueryManager linq = new LinqQueryManager();
ExcelManager manager = new ExcelManager();
//this return the path of the xml file created
string xmlPreviousCreated = Parser.GenerateXMLDBAsync(file1.FilePath, xmlFile1.FilePath, "Previous");
//now previous depends on the xml file created
List<ExcelBlock> previous = linq.GetListofBlocks(xmlPreviousCreated, xmlFile1.FilePath);
//the same with the next two variables
string xmlCurrentCreated = parser.GenerateXMLDBAsync(file2.FilePath, xmlFile2.FilePath, "Current");
List<ExcelBlock> current = linq.GetListofBlocks(xmlCurrentCreated, xmlFile2.FilePath);
//finally this depends on the previous vars
manager.CreateExcelFile(previous, current);
我正试图以某种方式调用方法,以便UI保持响应。因为创建xml文件的方法需要一段时间。我有两种方法可以创建xml文件,另外两种方法可以查询它们。我想要的是以有效的方式做到这一点,但我不确定我是否可以使用并行或asyn编程。这是第一次处理它
答案 0 :(得分:0)
根据所涉及方法的签名,有几种方法可以做到这一点。
如果这些方法中的每一个都已经异步/等待就绪,即返回Task
,那么这很简单
var valueX = await methodX();
var valueY = await methodDependingOnX(valueX);
var valueZ = await methodDependingOnY(valueY);
// More code here
假设方法签名类似于
public Task<string> methodX();
如果不是,你也会考虑包装上述电话。
var result = await Task.Run(() => {
var valueX = methodX();
var valueY = methodDependingOnX(valueX);
var valueZ = methodDependingOnY(valueY);
return valueZ;
});
// More code here