我想我错过了解async awaitc#中的行为.
我有两个返回Task定义的方法
public async Task Name()
{
await AsyncOperation()
}
Run Code Online (Sandbox Code Playgroud)
想象一下,AsyncOperation()像一个PostAsync的HttpClient.
现在我用其他方法调用它们
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 …
我使用此过程将会话状态存储在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
在MVC 4中,我可以使用@ Styles.Render("〜/ Content/css")调用一组CSS文件定义BundleConfig文件,而不是直接调用CSS.
什么时候应该使用bundle而不是直接调用文件?当我们有各种CSS文件来简化代码时,我清楚地理解它.但是如果有一个CSS文件,我们应该使用一个包还是直接调用它?
我有一个网络API.我希望它有两种类型的用户.它们完全不相关.
如何管理他们的身份验证?
我不希望将它们放在同一个表中并将它们的类型作为角色来管理,因为它们是不同的实体.一种用户由人使用,另一种由服务使用.他们有不同的类和属性.我想有两个IdentityDbContext,但我想在同一个数据库中维护所有.你觉得可能吗?
c# asp.net-mvc entity-framework asp.net-web-api asp.net-identity
我正在使用Powershell替换文本文件中的字符串.
为了在file.txt中替换String 1到String 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?
我有这个方法:
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中.
那么我怎么能做到这一点?也许我有错误设计?
您的服务器中有一个静态文件,在我们的例子中是一个图像 https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png
此文件在Microsoft OWA中使用.如果由于某种原因outlook无法获取文件,则会再次尝试使用重试计数.
OWA在请求中添加了一个参数,所以它尝试使用这样的URL
它不幸的OWA增加了&retryCount=,而不是?retryCount=,因为这使得MVC的东西它是一个不同的文件,用户接收404.
那么..任何方式忽略静态文件/图像的附加参数?
在使用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)行以重定向所有请求而不是仅重定向/.我试过了,*并且/*它不起作用.
我必须像这样使用MahApps.Metro从头开始创建一个新窗口。这会为您创建一个没有标准窗口按钮(“关闭”,“还原”或“最小化”)的无边界窗口。
我实现了这些按钮,效果很好。我看到的与其他窗口不同的是,该行为允许用户使用拖放来更改窗口的位置。
我一直在寻找,但我不知道该怎么做。
如何在非标准窗口中实现拖放行为?
我想做点什么
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) 我想制作网络应用程序.我应该从ASP MVC书籍开始,还是首先使用C#书籍,因为ASP MVC是用这种语言编写的.谢谢.
在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次.
为什么?
c# ×8
asp.net-mvc ×5
.net ×3
powershell ×2
scripting ×2
async-await ×1
asynchronous ×1
azure ×1
bundles ×1
foreach ×1
iis ×1
python ×1
redis ×1
session ×1
task ×1
window ×1
wpf ×1