因此,我试图解决这个问题,这是我晚上最好的部分.
我很幸运昨天被介绍到了parallel.foreach,它的工作方式就像我想要的那样,除了一个细节.
我有以下内容:
Parallel.ForEach(data, (d) =>
{
try
{
MyMethod(d, measurements);
}
catch (Exception e)
{
// logg
}
});
Run Code Online (Sandbox Code Playgroud)
在方法"MyMethod"中我有很多逻辑可以完成并且大部分都很好但我在api调用我获取数据的地方我使用异步任务为了能够使用"await"以便代码等到直到特定部分被执行然后继续:
private async void MyMethod(PimData pimData, IEnumerable<ProductMeasurements> measurements)
{
try
{
// alot of logic but most relevant part
await Task.WhenAll(ExecuteMeasurmentAndChartLogic(pimData.ProductNumber, entity));
await Task.WhenAll(resourceImportManager.HandleEntityImageFiles(pimData.ProductType + pimData.ProductSize,SwepImageType.Png, ResourceFileTypes.ThreeD, entity, LinkTypeId.ProductResource));
await Task.WhenAll(resourceImportManager.HandleEntityImageFiles(pimData.ProductSketch, SwepImageType.Png, ResourceFileTypes.Sketch, entity, LinkTypeId.ProductResource));
}
catch (Exception e)
{
// logg
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
1对于初学者,循环在所有代码完成之前完成
2第二个问题是我在许多api调用中得到"任务被取消"
3如上所述,代码不会等待每个方法完全执行.
在继续下一步之前,我无法让它在ExecuteMeasurmentAndChartLogic()方法中执行所有操作.
这给了我以下问题(更多问题):
在这个方法中,我创建了一个项目并将其添加到数据库中,这个项目需要我从在ExecuteMeasurmentAndChartLogic()内部完成的api调用获得的更多信息,但问题是几个项目变得疯狂并且必须等待其余数据不是我想要的.
侧面注意:我知道装箱物品并在所有数据出现之前添加到数据库中并不是最佳实践,但我正在整合PIM并且过程很简单
我想要运行几个线程但同时我希望在继续下一个方法之前为每个项执行fuill逻辑.
澄清:
几个项目正在运行
在继续下一部分代码之前,每个项目都需要handel 所需的所有逻辑,并且等待着这样做. …
我目前正在开发J2ME应用程序事件管理器。我正在使用PIM,但对此没有足够的知识。有人可以帮助我或给我有关如何设置显示,编辑和删除记录的参考吗?
到目前为止,这是我所做的。
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.DateField;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Alert;
import javax.microedition.pim.PIM;
import javax.microedition.pim.PIMItem;
import javax.microedition.pim.EventList;
import javax.microedition.pim.Event;
import javax.microedition.pim.PIMException;
import java.util.Date;
public class AddCalendarEvent extends MIDlet implements CommandListener {
private Display display;
private Form addEventForm;
private Command cmdAddEvent;
private Command cmdExit;
private TextField summaryField;
private DateField startDateField;
private DateField endDateField;
private TextField noteField;
private TextField locationField;
public AddCalendarEvent() {
if(checkPIMSupport() == false) {
exitMIDlet();
}
initializeComponents();
}
public void …Run Code Online (Sandbox Code Playgroud)