我试图阅读异步方法,现在我正在尝试创建自己的异步方法.该方法是一个webservice调用,它返回错误日志列表.我不确定我是否理解正确,所以我想我会分享我的代码,看看我是否应该做任何不同的事情.
我想要的代码就是通过调用方法GetAllErrorLogs()来返回错误日志列表,这是一个同步方法.因为我需要一秒钟才能获取所有错误日志,所以当我调用GetAllErrorLogs()方法时,我希望有机会做其他事情.这是代码.
[WebMethod]
public async Task<List<ErrorLog>> GetAllErrorLogs()
{
List<ErrorLog> errorLogs = new List<ErrorLog>();
await System.Threading.Tasks.Task.Run(() => {
errorLogs = ErrorLogRepository.GetAllErrorLogs();
});
if (errorLogs == null)
return new List<ErrorLog>();
return errorLogs;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我已经阅读(和使用过)async/await一段时间了很长一段时间但我还有一个问题我无法得到答案.说我有这个代码.
private async void workAsyncBtn_Click(object sender, EventArgs e)
{
var myTask = _asyncAwaitExcamples.DoHeavyWorkAsync(5);
await myTask;
statusTextBox.Text += "\r\n DoHeavyWorkAsync message";
}
Run Code Online (Sandbox Code Playgroud)
它从UI线程调用并返回到UI线程.因此,我可以在此方法中执行UI特定的操作await myTask.如果我曾经使用过,.ConfigureAwait(false)我会在做的时候得到一个线程异常,statusTextBox.Text += "\r\n DoHeavyWorkAsync message";因为我可以通过telled myTask来接受来自线程池的任何可用线程.
我的问题.据我所知,在这种情况下我永远不会离开UI线程,它仍然是异步运行,UI仍然是响应式的,我可以同时启动多个任务,从而加快我的应用程序.如果我们只使用一个线程,它怎么能工作?
谢谢!
编辑Sievajet
private async void workAsyncBtn_Click(object sender, EventArgs e)
{
await DoAsync();
}
private async Task DoAsync()
{
await Task.Delay(200);
statusTextBox.Text += "Call to form";
await Task.Delay(200);
}
Run Code Online (Sandbox Code Playgroud) 我在使用umbraco默认数据类型"相关链接"时遇到问题.我的问题是我想迭代属性的子/选项.我已经看过使用xml和xslt的例子,但我想知道在用户控件中是否有可能使用纯c#.
像这样的东西(但是一个工作的变体)
Node node = new Node(Node.getCurrentNodeId());
var linklist = node.GetProperty("link");
if (node.GetProperty("link") != null)
{
foreach (var item in linklist)
{
//get each item here
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
(我也在这里发布了这个问题)
我有一个包含两个项目的解决方案.一个项目仅用于完成所有数据工作,另一个项目是启动项目,用于处理所有Web内容.

现在我想通过首先获取项目根目录来从TaskManagerHelpers类获取TasksDataBase.xml.但我得到的只是TaskManager.Web根目录.(我从TaskManager.Web中的控制器调用TaskManagerHelpers.cs中的方法)
当我在同一个项目中的某个类时,如何获取TaskManager.Data根目录?
我尝试过使用theese方法和类似方法.
提前致谢!