我有一种情况,我希望异步启动用户定义的任务数,并等待所有任务完成.简化,这是我正在处理的:
[TestMethod]
public async Task Start() {
var numDrivers = 2;
while (numDrivers != 0) {
var rnd = new Random();
var r = rnd.Next(itemArray.Count);
var target = itemArray[r];
var proxyDriver = GetProxiedDriver();
Task.Run(() => HandleIntro(proxyDriver, target));
numDrivers--;
}
}
Run Code Online (Sandbox Code Playgroud)
对于某些上下文 - 这些是Selenium webdrivers开始运行一些UI测试.我看到浏览器弹出,但是一旦Task.Run()
完成,所有执行都会停止.n
在停止执行之前,如何在等待所有驱动程序完成之前触发驱动程序以异步方式运行?
我已经尝试了await Task.Run(() => HandleIntro(proxyDriver, target));
但这等待任务,他们不会同时运行.
HandleIntro:
private async Task HandleIntro(FirefoxDriver driver, string target) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud) 假设我有以下代码段:
using (var db = new dbContext()){
var user = db.Users.Find(3);
user.Name = "newName";
var viewModel = GetViewModelAndDoStuffToUser(user);
db.SaveChanges();
return viewmodel;
}
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试通过利用 async/await 来大规模提高这个片段的性能,但我已经读到 dbContext 不是“线程安全的”。所以我有点困惑:
async/await
与 dbContext 相关的调用.ConfigureAwait(false)
在我使用时使用。我读过这告诉我们不要重新输入 MVC 和 WebApi 控制器所需的“.NET 上下文”——但这是为这些控制器提供服务的应用程序的服务层。我还读到使用它可以防止死锁。dbContext
使用Task.WhenAll()
以下代码片段是否是朝着正确方向迈出的可扩展的线程安全步骤?
using (var db = new dbContext()){
var user = await db.Users.FindAsync(3).ConfigureAwait(false);
user.Name = "newName";
var viewModel = await GetViewModelAndDoStuffToUserAsync(user).ConfigureAwait(false);
await db.SaveChangesAsync().ConfigureAwait(false);
return viewmodel;
}
Run Code Online (Sandbox Code Playgroud) 我有以下内容:
<input type="checkbox" data-bind="visible: selectedItemsCount() > 0, attr: { value: itemId()}, checked: $parent.selectedFolderIds" />
Run Code Online (Sandbox Code Playgroud)
我要做的是添加另一个条件,以便在用户将鼠标悬停在元素上时激活visible.在可见绑定中有没有办法做到这一点?就像是:
<input type="checkbox" data-bind="visible: selectedItemsCount() > 0 || isHovering(), attr: { value: itemId()}, checked: $parent.selectedFolderIds" />
Run Code Online (Sandbox Code Playgroud) 我用过以下内容:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
正如这里建议的:
在我的项目中启用跨源AJAX请求.一切(POST/PUT/DELETE/GET)昨天都在运行.然后我决定在我的webAPI项目中添加一个新的端点,而这个端点失败了:
> XMLHttpRequest cannot load http://localhost:24144/api/card. Origin
> http://localhost:11089 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
在我的WebApiConfig中,我做到了这一点:
var cors = new EnableCorsAttribute("http://localhost:11089", "*", "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
我的AJAX请求与其他工作相同,如下所示:
var updateCard = function (data) {
var options = {
url: apiEndpoint + 'card',
type: 'PUT',
async: true,
dataType: 'json',
data: data,
xhrFields: {
withCredentials: true
}
};
return $.ajax(options)
.done(function (response) {
toastr.success("Card Updated", "Success");
})
.fail(function (msg) {
toastr.error("Could not update card.", "Error");
});
}
};
Run Code Online (Sandbox Code Playgroud)
即使直接在失败的方法或控制器上使用属性,我也会得到同样的错误:
[EnableCors(origins: "http://localhost:11089", …
Run Code Online (Sandbox Code Playgroud) 在我的配置中我有这个:
public sealed class Configuration : DbMigrationsConfiguration<App.Repository.NogginatorDbContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(AppDbContext context)
{
SqlConnection.ClearAllPools();
//context.Database.CreateIfNotExists();
System.Data.Entity.Database.SetInitializer(new DropCreateDatabaseAlways<AppDbContext>());
if (!WebMatrix.WebData.WebSecurity.Initialized)
{
WebSecurity.InitializeDatabaseConnection("TestConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这用于每次都应该删除并重新创建的测试数据库.虽然当我从包管理器控制台点击"update-database"时,即使在运行之前手动删除了数据库,我也会得到:
无法删除数据库"Nogginator.Test",因为它当前正在使用中.
我的连接字符串:
<add name="TestConnection"
providerName="System.Data.SqlClient"
connectionString="Data Source=.\;Initial Catalog=App.Test;Trusted_Connection=True;MultipleActiveResultSets=True;" />
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
我有一个带有服务层的MVC应用程序,我正在试图弄清楚如何消毒所有输入而不会疯狂.
我在控制下进行验证 - 在客户端和模型(EF5)上处理字段长度,数据类型和其他验证.
我现在要处理的是阻止SQL注入和XSS - 我能够通过将一些标记粘贴到我的输入中来破坏我的应用程序.
例如:
<textarea data-bind="value: aboutMe">@Model.AboutMe </textarea>
Run Code Online (Sandbox Code Playgroud)
如果我在AboutMe中保存一些脚本标记:
<script type="text/javascript">alert("hey")</script>
Run Code Online (Sandbox Code Playgroud)
由于非法字符导致页面中断:
Uncaught SyntaxError: Unexpected token ILLEGAL
Run Code Online (Sandbox Code Playgroud)
我想我可以挑选每一个输入并将其包装在某种SanitizeText()函数中,该函数从已提交的任何内容中删除所有括号,但这感觉便宜又乏味,并且不能解决SQL注入问题.
什么是正确的方法来解决这个问题?
我有一个移动优化的网络应用程序,可用于getUserMedia
访问网络摄像头和麦克风资源.
我正在将这个应用程序包装成一个,WKWebView
因为我想提供本机应用程序体验.我知道,iOS不允许通过浏览器访问摄像机-但有什么办法来获得权限的网络摄像头/麦克风与本机代码(沿着封装)和饲料这对Web应用程序-也许在某种程度上指向getUserMedia
一个本地流源?
我知道有一些商业图书馆,AddRange
但据我所知AddRange
在幕后
我正在寻找一个免费实用程序,可用于同时添加一组新实体 - 是否存在适用于 EF6 的实用程序?
如果我向删除端点发送一个 id,我的 webAPI 解决方案目前可以工作:
DELETE /api/object/1
Run Code Online (Sandbox Code Playgroud)
和:
[HttpDelete]
public HttpResponseMessage DeleteFolder(int id)
{
// Do stuff
}
Run Code Online (Sandbox Code Playgroud)
在我的客户端应用程序中,我有一个允许多次删除的 UI - 现在它只是在循环中为每个选定的 id 调用此端点,这不是超级高性能。在这种情况下,我希望能够将一组 Ids 发送到 Delete 方法......如何实现?
假设我构建了一个超级移动友好的 Web 应用程序,我希望 Android 用户能够在 Play 商店中下载该应用程序。
我可以使用 Xamarin 来:
本质上是通过使用现有的 Web 应用程序来缩短 Android 应用程序的 MVP?如果是这样,是否有任何众所周知的流程或文档可以证明这一点?
.net ×2
asynchronous ×2
c# ×2
knockout.js ×2
asp.net ×1
asp.net-mvc ×1
async-await ×1
cors ×1
html5 ×1
ios ×1
objective-c ×1
rest ×1
swift ×1
wkwebview ×1
xamarin ×1