我正在尝试异步上传文件到S3存储桶.我可以使用以下代码成功完成此操作.
我似乎无法弄清楚如何处理两个同时具有相同返回类型的不同方法.
UploadImages和UploadAttachments两个返回IEnumerable的EntityUploadResult.如何在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) 我正在与我的 Web API 分开的类库中构建一个存储库,以保持关注点分离。
我想将数据库配置存储在 my 中appsettings.json,以便可以覆盖 Azure Web Apps 中的这些设置。这为我提供了对本地、预生产和生产环境进行单独设置的途径。
我假设向存储库提供配置设置的最佳方法是从 中读取它们Startup.cs,然后将它们传递到类库。
存储这些设置以确保它们在应用程序的整个生命周期中持续存在并确保它们不会被垃圾收集的最佳方式是什么?
我之前有一个问题(已经解决了),为什么我被限制在CAML中的两个参数.
我现在想知道的是,我可以重新格式化这个CAML查询以接受5个OR参数,其中我从列表中收集所有项目我找到了5个参数中的任何一个的匹配项.
我问的原因是,我仅限于使用Sandbox解决方案Web部件的Designer部署.这些解决方案的资源非常有限,我希望尽可能提高查询效率,而且大多数LINQ解决方案都不像CAML那样有效地改变SQL调用.
我有一个基类,它有一个嵌入式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) 我有一个云应用程序,它使用优秀的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) 出于某种原因,如果我输入:
var i = document.getElementById('fake').style.backgroundPosition;
Run Code Online (Sandbox Code Playgroud)
我得到了不确定.
然而,
document.getElementById('fake').style.backgroundPosition;
Run Code Online (Sandbox Code Playgroud)
单独回答正确的答案.
有任何想法吗?
答案,从标记答案略有修改:
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) 我有一个类(简化)如下:
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可以将其与上面的行结合使用吗?最好的方法是什么?
我有多种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可能会遗漏一些简单的东西
我有一个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) c# ×8
async-await ×4
.net ×2
asynchronous ×2
javascript ×2
jquery ×2
asp.net-core ×1
caml ×1
html ×1
linq ×1
performance ×1
reflection ×1
sharepoint ×1
sql ×1
webclient ×1