相关疑难解决方法(0)

如何以及何时使用'async'和'await'

从我的理解主要事情之一asyncawait要做的就是让代码易于读写-但使用它们等于产卵后台线程来执行持续时间长的逻辑?

我正在尝试最基本的例子.我在内联添加了一些评论.你能为我澄清一下吗?

// I don't understand why this method must be marked as `async`.
private async void button1_Click(object sender, EventArgs e)
{
    Task<int> access = DoSomethingAsync();
    // task independent stuff here

    // this line is reached after the 5 seconds sleep from 
    // DoSomethingAsync() method. Shouldn't it be reached immediately? 
    int a = 1; 

    // from my understanding the waiting should be done here.
    int x = await access; 
}

async Task<int> DoSomethingAsync()
{
    // is …
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await

989
推荐指数
19
解决办法
78万
查看次数

导致死锁的异步/等待示例

我发现了一些使用c#async/ awaitkeywords的异步编程的最佳实践(我是c#5.0的新手).

给出的建议之一是:

稳定性:了解同步上下文

...某些同步上下文是不可重入和单线程的.这意味着在给定时间内只能在上下文中执行一个工作单元.一个例子是Windows UI线程或ASP.NET请求上下文.在这些单线程同步上下文中,很容易使自己陷入僵局.如果从单线程上下文中生成任务,然后在上下文中等待该任务,则等待代码可能会阻止后台任务.

public ActionResult ActionAsync()
{
    // DEADLOCK: this blocks on the async task
    var data = GetDataAsync().Result;

    return View(data);
}

private async Task<string> GetDataAsync()
{
    // a very simple async method
    var result = await MyWebService.GetDataAsync();
    return result.ToString();
}
Run Code Online (Sandbox Code Playgroud)

如果我自己尝试剖析它,主线程会产生一个新线程MyWebService.GetDataAsync();,但由于主线程在那里等待,它等待结果GetDataAsync().Result.同时,说数据准备好了.为什么主线程不继续它的延续逻辑并从中返回字符串结果GetDataAsync()

有人可以解释一下为什么上面的例子中存在死锁吗?我完全不知道问题是什么......

c# deadlock task-parallel-library async-await c#-5.0

87
推荐指数
3
解决办法
4万
查看次数

检测ASP.NET中的内存泄漏

我的开发团队现在正在使用ASP.NET 3.5/4.0,我们的站点在IIS 7.5上运行.最近,我们一直遇到问题(大约每周一次)导致我们的ASP.NET应用程序抛出内存不足异常."解决方案"是重新启动我们网站上的应用程序池.我说"解决方案"因为它不是解决方案; 它更像是一种绷带,只是让我们的应用程序池保持在合理的状态.在我看来,一些应用程序或许多应用程序正在泄漏内存,这会随着时间的推移而累积并导致内存不足异常.虽然我可以设置IIS以定期重新启动应用程序池,但我宁愿知道如何检测内存泄漏以尝试修复程序而不是继续应用band-aids.是否有任何工具可以检测和记录ASP.NET应用程序的内存泄漏?

此外,当我们切换到使用Telerik的RAD控件时,我们真的开始看到更多这个问题.有没有其他人使用这些控件有类似的问题?

谢谢,

亚伦

c# asp.net telerik iis-7.5

30
推荐指数
2
解决办法
2万
查看次数