小编Wes*_*ley的帖子

async/await当两个方法的AllAll具有相同的返回类型时

我正在尝试异步上传文件到S3存储桶.我可以使用以下代码成功完成此操作.

我似乎无法弄清楚如何处理两个同时具有相同返回类型的不同方法.

UploadImagesUploadAttachments两个返回IEnumerableEntityUploadResult.如何在Parallel中执行它们并在完成后返回结果?

public async Task<List<EntityUploadResult>> BulkUploadFiles(IEnumerable<BulkUploadFile> files)
{
    var results = new List<EntityUploadResult>();

    var images = UploadImages(files.Where(x => x.FileType == BulkFileType.Image).AsEnumerable());
    var attachments = UploadAttachments(files.Where(x => x.FileType == BulkFileType.Attachment).AsEnumerable());

    results.AddRange(await images);
    results.AddRange(await attachments);

    return results;
}

private async Task<IEnumerable<EntityUploadResult>> UploadImages(IEnumerable<BulkUploadFile> files)
{
    return await Task.WhenAll(files.Select(i => UploadImage(i)));
}

private async Task<IEnumerable<EntityUploadResult>> UploadAttachments(IEnumerable<BulkUploadFile> files)
{
    return await Task.WhenAll(files.Select(i => UploadAttachment(i)));
}
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await

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

在类库中传递和维护配置

我正在与我的 Web API 分开的类库中构建一个存储库,以保持关注点分离。

我想将数据库配置存储在 my 中appsettings.json,以便可以覆盖 Azure Web Apps 中的这些设置。这为我提供了对本地、预生产和生产环境进行单独设置的途径。

我假设向存储库提供配置设置的最佳方法是从 中读取它们Startup.cs,然后将它们传递到类库。

存储这些设置以确保它们在应用程序的整个生命周期中持续存在并确保它们不会被垃圾收集的最佳方式是什么?

c# asp.net-core asp.net-core-webapi

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

我还可以使用CAML进行此查询吗?

我之前有一个问题(已经解决了),为什么我被限制在CAML中的两个参数.

供参考:Sharepoint CAML中的OR问题

我现在想知道的是,我可以重新格式化这个CAML查询以接受5个OR参数,其中我从列表中收集所有项目我找到了5个参数中的任何一个的匹配项.

我问的原因是,我仅限于使用Sandbox解决方案Web部件的Designer部署.这些解决方案的资源非常有限,我希望尽可能提高查询效率,而且大多数LINQ解决方案都不像CAML那样有效地改变SQL调用.

c# sql sharepoint caml sharepoint-2010

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

使用Emit IL和内部类?

我有一个基类,它有一个嵌入式List,所有子类都可以使用它来返回一个已排序的集合.

我一直在使用Activator.CreateInstance(),但与简单的new()函数相比,这是比较慢的TERRBILY.

我找到了一种使用Emit IL的方法,几乎​​和new()一样快,但如果我的类不公开,我会收到MethodAccessException错误.这似乎很常见.

有没有解决的办法?

这里生成类的代码:http: //codeblocks.codeplex.com/wikipage?title = FastActivator%20Sample

代码与上面的代码一起使用:

public static List<T> SortedCollection<T>(SPListItemCollection items, ListSortType sortType, List<Vote> votes) where T : IVotable
{
    var returnlist = new List<T>();  
    var functionCreator = FastActivator.GenerateFunc<Func<SPListItem, List<Vote>, T>>();
    for (int i = 0; i < items.Count; i++) { returnlist.Add(functionCreator(items[i], votes)); }

    //Old code here
    //Type genericType = typeof(T);
    //for (int i = 0; i < items.Count; i++) { returnlist.Add((T)Activator.CreateInstance(genericType, new object[] { items[i], votes })); }

    switch …
Run Code Online (Sandbox Code Playgroud)

c# reflection performance reflection.emit instantiation

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

获得关键财产

我有一个云应用程序,它使用优秀的WURFL库进行设备检测.

根据访问网站的设备类型,我们加载不同的资源.

直到最近,我一直在我的云应用程序中嵌入该服务.问题在于它为每个调试例程增加了3-5分钟,因为该服务支持检测数千个设备..NET团队推荐的模式是将服务加载到缓存中:

var wurflDataFile = HttpContext.Current.Server.MapPath(WurflDataFilePath);
var configurer = new InMemoryConfigurer().MainFile(wurflDataFile);
var manager = WURFLManagerBuilder.Build(configurer);
HttpContext.Current.Cache["WurflManagerCacheKey"] = manager;
Run Code Online (Sandbox Code Playgroud)

这个3-5分钟的延迟让我们在5个开发人员的团队中花费了大约1-3个小时的生产时间(每次他们部署时,无论是本地还是PPE,人们都会起床吃零食等)

为了加快速度,我们最近创建了一个独立的Cloud WEB API服务,它接收正确的信息并返回一个包含我们所需信息的对象.我们从活动服务获得的响应时间非常短(少于30毫秒).

我现在面临的问题是,我不确定我们如何最好地改变我们的加载程序.

我可以制作HomeController async,等待房产,但这似乎很危险.处理这样的事情最好的方法是什么?

public static async Task<Device> GetDevice(RequestInfo requestInfo)
{
    var client = new HttpClient();
    client.BaseAddress = new Uri("http://mysiteurl.com");
    client.DefaultRequestHeaders.Accept.Add(
          new MediaTypeWithQualityHeaderValue("application/json"));

    var response = await client.PostAsJsonAsync("/api/devicedetection", requestInfo);

    if (response.IsSuccessStatusCode)
    {
        return await response.Content.ReadAsAsync<Device>();
    }
    return new Device(Device.Default);
}

//Proposed Solution from team as it stands
public async Task<ActionResult> Index(string id)
{
    _device = …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await

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

将DOM样式分配给var

出于某种原因,如果我输入:

var i = document.getElementById('fake').style.backgroundPosition;
Run Code Online (Sandbox Code Playgroud)

我得到了不确定.

然而,

document.getElementById('fake').style.backgroundPosition;
Run Code Online (Sandbox Code Playgroud)

单独回答正确的答案.

有任何想法吗?

html javascript jquery

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

简化我的JQuery Mess

答案,从标记答案略有修改:

var eoc = "easeOutCirc",mNSS = 'metrsoNavSpanSelected';

$('.metroNavSpan').click(function(){
    var ind = $(this).index();
    $('.content-box').eq(ind).prevAll().animate({marginLeft: -1040},750,eoc);
    $('.content-box').eq(ind).nextAll().andSelf().animate({marginLeft: 0},750,eoc);
    $('#fake').animate({backgroundPosition: (-65*ind)},1550,eoc);
    $('.metroNavSpan').removeClass(mNSS);
    $(this).addClass(mNSS);
});
Run Code Online (Sandbox Code Playgroud)

变化:eastOutCirc上的拼写是固定的:)

背景位置动画从 - =(65*ind)改为just(-65*ind).不希望变化是积累的,意思是第一组应该是0,0; 第二组应始终为-65,0. - =正在积累点击次数,因此在第4和第5面板之间来回走动会产生非常大的数字.

nextAll和prevAll是分开的,因为保持它们在同一行中总是在动画后将面板捕捉回面板1.

原始问题:

我有一系列面板,我正在为一个网站以Metro风格制作动画.问题是,我没有看到用更少的代码行完成下面的好方法.我怎么能以更紧凑的优雅方式做这样的事情?

$('#metroNow').click(function() {
    $("#c1").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c2").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c3").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c4").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c5").animate({marginLeft: 0},750,"easeOutCirc");
    $('#fake').animate({backgroundPosition: 0}, 1550, "easeOutCirc");
    $('.metroNavSpan').removeClass('metroNavSpanSelected');
    $('#metroNow').addClass('metroNavSpanSelected');
});
$('#metroPeople').click(function() {
    $("#c1").animate({marginLeft: -1040},750,"easeOutCirc");
    $("#c2").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c3").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c4").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c5").animate({marginLeft: 0},750,"easeOutCirc");
    $('#fake').animate({backgroundPosition: -65}, 1550, "easeOutCirc");
    $('.metroNavSpan').removeClass('metroNavSpanSelected');
    $('#metroPeople').addClass('metroNavSpanSelected');
});
$('#metroInfopedia').click(function() {
    $("#c1").animate({marginLeft: -1040},750,"easeOutCirc");
    $("#c2").animate({marginLeft: -1040},750,"easeOutCirc");
    $("#c3").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c4").animate({marginLeft: 0},750,"easeOutCirc");
    $("#c5").animate({marginLeft: …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

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

针对多种情况的第二个Linq过滤器

我有一个类(简化)如下:

class AppMeta
{
    public int Id { get; set; }
    public string Scope { get; set; }
    public User CreatedBy { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个LINQ语句,通过交叉引用整数列表并丢弃匹配来正确地过滤结果:

var hiddenApps = List<int>();
//populate hiddenApps
var listItems = List<rawdata>;
//populate listItems
List<AppMeta> apps = AppMeta.Collection(listItems).Where(i => !hiddenApps.Contains(i.Id)).ToList()
Run Code Online (Sandbox Code Playgroud)

我的问题是,我需要进一步过滤此列表如下,

(Where Scope == "user" && Where User.LoginName == CurrentUser.LoginName)

我是否仍然可以在一个Linq语句中执行此操作,IE可以将其与上面的行结合使用吗?最好的方法是什么?

c# linq

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

使用FOREACH麻烦AWAIT/ASYNC和WebApi

我有多种async方法从不同的基于OAuth的REST Api调用返回相同的类型.

如果我直接打电话给我,我可以收回数据:

//Call a specific provider
public async Task<List<Contacts>> Get()
{
    return await Providers.SpecificProvider.GetContacts();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试遍历多个帐户,则对象将在AWAIT完成之前返回:

//Call all providers
public async Task<List<Contacts>> Get()
{
    return await Providers.GetContactsFromAllProviders();
}

public async Task<List<Contacts>> GetContactsFromAllProviders()
{
    var returnList = new List<Contacts>();
    //Providers inherits from List<>, so it can be enumerated to trigger
    //all objects in the collection
    foreach (var provider in Providers)
    {
        var con = await provider.GetContacts();
        returnList.Add(con);
    }
    return returnList;
}
Run Code Online (Sandbox Code Playgroud)

我是新手,async可能会遗漏一些简单的东西

c# async-await asp.net-web-api

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

使用DownloadDataAsync下载AWAIT多个文件

我有一个zip文件创建者,它接收一个String[]Urls,并返回一个包含所有文件的zip文件String[]

我想会有很多这方面的例子,但我似乎找不到"如何异步下载多个文件并在完成后返回"的答案

如何一次下载{n}个文件,仅在所有下载完成后返回词典?

private static Dictionary<string, byte[]> ReturnedFileData(IEnumerable<string> urlList)
{
    var returnList = new Dictionary<string, byte[]>();
    using (var client = new WebClient())
    {
        foreach (var url in urlList)
        {
            client.DownloadDataCompleted += (sender1, e1) => returnList.Add(GetFileNameFromUrlString(url), e1.Result);
            client.DownloadDataAsync(new Uri(url));
        }
    }
    return returnList;
}

private static string GetFileNameFromUrlString(string url)
{
    var uri = new Uri(url);
    return System.IO.Path.GetFileName(uri.LocalPath);
}
Run Code Online (Sandbox Code Playgroud)

.net c# webclient async-await webclient-download

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