小编SB2*_*055的帖子

异步启动多个任务并等待它们完成

我有一种情况,我希望异步启动用户定义的任务数,并等待所有任务完成.简化,这是我正在处理的:

[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)

.net c# asynchronous task-parallel-library async-await

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

我可以将 Async/Await 与 dbContext 一起使用吗?如果是这样,我应该什么时候使用 ConfigureAwait(false)?

假设我有以下代码段:

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 不是“线程安全的”。所以我有点困惑:

  1. 我是否可以使用async/await与 dbContext 相关的调用
  2. 是否应该.ConfigureAwait(false)在我使用时使用。我读过这告诉我们不要重新输入 MVC 和 WebApi 控制器所需的“.NET 上下文”——但这是为这些控制器提供服务的应用程序的服务层。我还读到使用它可以防止死锁。
  3. 不管是不是-在更复杂的场景-我可以并行使用相同的实例调用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)

.net c# multithreading asynchronous entity-framework

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

用悬停敲出可见的绑定?

我有以下内容:

<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)

knockout.js

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

CORAP与WebAPI有时有效,有时则无效

我用过以下内容:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

正如这里建议的:

使用WebAPI PUT/POST请求启用CORS?

在我的项目中启用跨源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)

cors asp.net-web-api asp.net-web-api-routing

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

无法删除数据库,因为它当前正在使用 - EF代码优先

在我的配置中我有这个:

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)

为什么会这样?

entity-framework connection-string ef-code-first

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

清理ASP.NET MVC应用程序中的输入

我有一个带有服务层的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注入问题.

什么是正确的方法来解决这个问题?

asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 knockout.js

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

在wkwebview中启用摄像头和麦克风访问

我有一个移动优化的网络应用程序,可用于getUserMedia访问网络摄像头和麦克风资源.

我正在将这个应用程序包装成一个,WKWebView因为我想提供本机应用程序体验.我知道,iOS不允许通过浏览器访问摄像机-但有什么办法来获得权限的网络摄像头/麦克风与本机代码(沿着封装)和饲料这对Web应用程序-也许在某种程度上指向getUserMedia一个本地流源?

html5 objective-c ios swift wkwebview

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

使用实体框架 6 进行批量插入

我知道有一些商业图书馆,AddRange但据我所知AddRange在幕后

我正在寻找一个免费实用程序,可用于同时添加一组新实体 - 是否存在适用于 EF6 的实用程序?

entity-framework-6

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

使用 WebAPI 删除端点删除多个 ID?

如果我向删除端点发送一个 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 方法......如何实现?

rest asp.net-web-api

5
推荐指数
2
解决办法
9513
查看次数

如何使用 Xamarin 来包装 Web 应用程序,就像它是 Android 原生应用程序一样?

假设我构建了一个超级移动友好的 Web 应用程序,我希望 Android 用户能够在 Play 商店中下载该应用程序。

我可以使用 Xamarin 来:

  • 将整个移动应用包装为单个 WebView
  • 注册移动推送通知

本质上是通过使用现有的 Web 应用程序来缩短 Android 应用程序的 MVP?如果是这样,是否有任何众所周知的流程或文档可以证明这一点?

xamarin.android xamarin xamarin.forms

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