小编Ric*_*olo的帖子

嵌套异步等待不等待

我想我错过了解async awaitc#中的行为.

我有两个返回Task定义的方法

public async Task Name()
{
await AsyncOperation() 
}
Run Code Online (Sandbox Code Playgroud)

想象一下,AsyncOperation()像一个PostAsyncHttpClient.

现在我用其他方法调用它们

public asyn Task Method()
{
await Name1(() => { "bla bla"});
await Name2();
Console.WriteLine("Continue");
}
Run Code Online (Sandbox Code Playgroud)

这对我来说是预期的.等待,直到Name1()Name2()完成,然后继续.

现在我需要窝Name1()Name2().实际上Name1()是一个请求等待窗口,它接收一个慢速操作的lambda参数,而Name2()文件的下载速度很慢.我希望在下载文件时出现Plese Wait窗口.

所以我尝试这样的事情:

public asyn Task Method()
{
    await Name1( async ()=>
    {
        await Name2();
    }
    Console.WriteLine("Continue");
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,执行不会等待untile Name2()完成.为什么会发生这种情况并且await不等待?

更新

这是请等待的方法背后的逻辑.它显示使用Mahapps Dialogs的Please Wait消息,执行lambda …

c# asynchronous task async-await

4
推荐指数
1
解决办法
5122
查看次数

Redis会话状态提供程序不会删除会话放弃上的键

我使用此过程将会话状态存储在Azure Redis缓存中.

NuGet RedisSessionStateProvider在Redis中保存会话状态,您可以管理它,因为它是clasiccal inProc Session.

当用户登录我做这样的事情:

AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
Session.Add("key", "value");
Run Code Online (Sandbox Code Playgroud)

会话值在应用程序中始终可用.如果您查看REDIS缓存,您将看到这两个密钥snurztvlyl2jk5wnzstjikln_Internal snurztvlyl2jk5wnzstjikln_Data在哪里 snurztvlyl2jk5wnzstjikln是SessionID.

当我退出时:

public ActionResult LogOff()
{
Session.Abandon();
AuthenticationManager.SignOut();
return RedirectToAction("Index", "Home");
}
Run Code Online (Sandbox Code Playgroud)

用户SignOut,但如果我查看redis缓存,则值仍然存在.它们不会被删除,只会在会话超时后删除.我也尝试过Session.Clear(),Redis缓存中的密钥仍然存在.

为什么不删除密钥或我做错了什么?

更新我创建一个公共repo再现此问题 https://github.com/ricardopolo/RedisIssue

asp.net-mvc session azure redis stackexchange.redis

4
推荐指数
1
解决办法
2313
查看次数

何时在MVC4中使用bundle

在MVC 4中,我可以使用@ Styles.Render("〜/ Content/css")调用一组CSS文件定义BundleConfig文件,而不是直接调用CSS.

什么时候应该使用bundle而不是直接调用文件?当我们有各种CSS文件来简化代码时,我清楚地理解它.但是如果有一个CSS文件,我们应该使用一个包还是直接调用它?

c# asp.net-mvc bundles asp.net-mvc-4 asp.net-optimization

3
推荐指数
1
解决办法
7090
查看次数

两个IdentityDbContext在同一个数据库中

我有一个网络API.我希望它有两种类型的用户.它们完全不相关.

如何管理他们的身份验证?

我不希望将它们放在同一个表中并将它们的类型作为角色来管理,因为它们是不同的实体.一种用户由人使用,另一种由服务使用.他们有不同的类和属性.我想有两个IdentityDbContext,但我想在同一个数据库中维护所有.你觉得可能吗?

c# asp.net-mvc entity-framework asp.net-web-api asp.net-identity

3
推荐指数
1
解决办法
639
查看次数

[powershell中的角色

我正在使用Powershell替换文本文件中的字符串.

为了在file.txt中替换String 1String 2,我使用

(Get-Content file.ps1) | Foreach-Object { $_ -replace 'String 1', 'String 2'} | Set-Content file.txt
Run Code Online (Sandbox Code Playgroud)

它甚至适用于替换字符,如-#

它需要用[字符替换字符串但它不起作用.我需要替换-state [VMstate] ::停止并使用-state停止,但它不起作用

(Get-Content TEMP_config.ps1) | Foreach-Object { $_ -replace '-state [VMstate]::stopped', '-state stopped'} | Set-Content TEMP_config.ps1
Run Code Online (Sandbox Code Playgroud)

我怎么能找到[ char?

powershell scripting

2
推荐指数
1
解决办法
186
查看次数

Lambda和Foreach

我有这个方法:

public Wrapper(Action<string> codeBlock)
{
   //Code code code

        Parallel.ForEach<Computer>(Computers, computer =>
        {
                //CODE CODE 
               codeblock();

               //More code

        );
    //more code

 }
Run Code Online (Sandbox Code Playgroud)

我用它来将一个代码块放在一个包装器中,这对我的应用程序来说很重要.

我用类似的东西来调用它

Wrapper((s) => {

//My Code block
//code
//More code

});
Run Code Online (Sandbox Code Playgroud)

我想在我的代码块中使用在包装器的foreach中创建的集合Computers的对象计算机.所以,如果我做了这样的事情:

Wrapper((s) => {

//My Code block
 AFunction(computer);
//More code

});
Run Code Online (Sandbox Code Playgroud)

它显然是失败的,因为在我调用包装器的上下文中"计算机"不存在,只存在于包装器的foreach中.

那么我怎么能做到这一点?也许我有错误设计?

.net c#

2
推荐指数
1
解决办法
139
查看次数

MVC忽略文件中的参数

您的服务器中有一个静态文件,在我们的例子中是一个图像 https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png

此文件在Microsoft OWA中使用.如果由于某种原因outlook无法获取文件,则会再次尝试使用重试计数.

OWA在请求中添加了一个参数,所以它尝试使用这样的URL

https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png&retrycount=2

它不幸的OWA增加了&retryCount=,而不是?retryCount=,因为这使得MVC的东西它是一个不同的文件,用户接收404.

那么..任何方式忽略静态文件/图像的附加参数?

iis asp.net-mvc asp.net-mvc-4

2
推荐指数
1
解决办法
227
查看次数

1
推荐指数
1
解决办法
51
查看次数

将所有url请求重定向到一个处理程序

在使用google webapp框架的Google App Engine应用程序中,如何将每个请求重定向到一个处理程序?

检查此代码:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication([('/', MainPage)],
                                     debug=True)

def main():
    run_wsgi_app(application)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

如何更改application = webapp.WSGIApplication([('/', MainPage)], debug=True)行以重定向所有请求而不是仅重定向/.我试过了,*并且/*它不起作用.

python google-app-engine

0
推荐指数
1
解决办法
204
查看次数

实施窗口拖放WPF

我必须像这样使用MahApps.Metro从头开始创建一个新窗口。这会为您创建一个没有标准窗口按钮(“关闭”,“还原”或“最小化”)的无边界窗口。

我实现了这些按钮,效果很好。我看到的与其他窗口不同的是,该行为允许用户使用拖放来更改窗口的位置。

我一直在寻找,但我不知道该怎么做。

如何在非标准窗口中实现拖放行为?

.net c# wpf drag-and-drop window

0
推荐指数
1
解决办法
3378
查看次数

是否可以使用常量值来命名函数?

我想做点什么

public ActionResult Constants.MethodName()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)

你觉得可能吗?

更新:我想这样,因为我在客户端有一些应用程序的组件调用此方法.所以,如果有一天我想重命名这个方法,那么一切都将被打破.如果我使用常量,我可以毫无问题地重命名它. Constants在这个例子中是一个共享库,一个项目中的静态类,它包含解决方案的所有常量.

Constants 看起来像这样

public static class Constants
{
    public const string MethodName = "MethodName";    
}
Run Code Online (Sandbox Code Playgroud)

在客户端:

            HubConnection connection = new HubConnection(_hubUrl);
            IHubProxy proxy = connection.CreateHubProxy(Constants.MethodName);
            connection.Start().Wait();
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-4

0
推荐指数
1
解决办法
80
查看次数

要学习ASP MVC我应该先学习C#吗?

我想制作网络应用程序.我应该从ASP MVC书籍开始,还是首先使用C#书籍,因为ASP MVC是用这种语言编写的.谢谢.

c# asp.net-mvc asp.net-mvc-3

-1
推荐指数
1
解决办法
1675
查看次数

在Directory.EnumerateFiles或Directory.GetFiles中使用Take()

在Directory.EnumerateFiles或Directory.GetFiles中允许使用.take()?

我有这个并且有效

    Parallel.ForEach(Directory.EnumerateFiles(sourceFolder, "*", 
               SearchOption.AllDirectories), file =>
    {
         //DO SOMETHING

    });
Run Code Online (Sandbox Code Playgroud)

我只想在例如100个文件中进行循环.所以:

    Parallel.ForEach(Directory.EnumerateFiles(sourceFolder, "*",
              SearchOption.AllDirectories).Take(100), file =>
    {
         //DO SOMETHING

    });
Run Code Online (Sandbox Code Playgroud)

但是这个周期并没有像我预期的那样被记录100次.

为什么?

.net c# foreach parallel.foreach

-2
推荐指数
1
解决办法
1487
查看次数